Repository navigation
Proposal: Add RTL (Right-to-Left) Support for Multi-Platform UI-UX #409
Description
Context
The current version of UI UX Pro Max (v2.10.1) provides an excellent design intelligence system with 161 product types, 67 UI styles, and 57 font pairings. However, it lacks native support for RTL (Right-to-Left) languages (e.g., Persian, Arabic, Hebrew).
With over 101k stars and a growing international user base, adding RTL support would significantly expand the project's reach and accessibility.
Proposed Feature
I'd like to contribute a RTL compatibility layer that integrates with the existing design system generator. The implementation would follow a phased approach:
Phase 1: Data Layer (Minimal Viable Addition)
· Add rtl_compatible column to products.csv, styles.csv, and color_palettes.csv
· Tag each entry as TRUE/FALSE based on RTL suitability (e.g., Minimalism ✅, Brutalism ✅, Hero-Centric Design
Phase 2: Search Engine Enhancement
· Add --rtl flag to search.py to filter results by RTL compatibility
· Return only RTL-compatible styles/palettes when flag is enabled
Phase 3: Design System Output
· Add a new "RTL Guidelines" section to the --design-system output, including:
· direction: rtl
· text-align: right
· Swapped padding/margin values (padding-left ↔ padding-right)
· Icon mirroring recommendations (for directional icons like arrows)
· Anti-patterns to avoid (e.g., left-aligned timelines, left-to-right animations)
Phase 4: Stack-Specific Templates (Future PRs)
· Create RTL-aware templates for popular stacks:
· HTML+Tailwind: Add dir="rtl" and rtl: utility classes
· React/Next.js: Add dir prop to layout components
· React Native: Add I18nManager integration
Implementation Plan
- Data Preparation: I've already analyzed the existing CSV files and identified which styles are RTL-compatible (85% of styles work with minimal changes).
- Code Changes: Minimal modifications to search.py (less than 100 lines added).
- Testing: Will test with sample Persian/Arabic prompts to validate output quality.
- Documentation: Update README.md with RTL usage examples.
Questions for Maintainers
- Would you prefer RTL support as a flag (--rtl) or an auto-detect feature (based on language of the prompt)?
- Should RTL compatibility be strict (only RTL-optimized styles) or flexible (all styles with RTL warnings)?
- Do you have any existing RTL plans or preferences I should align with?
Why This Matters
· Accessibility: Makes the tool usable for developers in Middle Eastern, North African, and South Asian markets.
· Completeness: A truly "multi-platform" design system should support all writing directions.
· Community Growth: Opens the project to contributions from Persian/Arabic-speaking developers.
Related Issues/PRs
I've searched the existing issues and didn't find any open RTL requests. If this has been discussed elsewhere, please point me to it.
Next Steps
If this proposal is approved, I'll:
- Fork the repository
- Create a feature/add-rtl-support branch
- Implement Phase 1–3 as a single PR
- Open a draft PR for early feedback
Looking forward to your thoughts! 🙌
Tags to add after creation:
enhancement, feature-request, accessibility, good-first-issue
Activity
clark-cant commentedon Jul 4, 2026
Thanks for the detailed proposal @darajoukar! This is a well-structured plan. Quick answers to your questions:
--rtlflag for explicit control, with auto-detect as a future enhancement.Your phased approach looks solid. Phase 1-3 as a single PR is reasonable. A few notes:
rtl_compatiblecolumn in CSVs should probably bertl_levelwith values:full,partial,caveatsinstead of TRUE/FALSE.--rtlaccepting optional values (e.g.,--rtl=fullfor strict filtering).Go ahead with the fork + draft PR approach. We'll review early. 🚀
darajoukar commentedon Jul 4, 2026
@clark-cant
Thank you for the quick and positive feedback!
I'll start with Phase 1 & 2 as you suggested (CSV columns +
--rtlflag) and open a draft PR soon. The flexible approach with warnings makes sense.I'll keep the PR focused and small for easier review.
Thanks again for the guidance!
clark-cant commentedon Jul 6, 2026
Thanks for the update @darajoukar! 👍
Focusing on Phase 1 & 2 first is the right call — CSV columns +
--rtlflag will give us a solid foundation to validate the approach before expanding to templates.Looking forward to the draft PR. Feel free to tag me for early review! 🚀
Posted by github-maintain cron
clark-cant commentedon Jul 8, 2026
Hey @darajoukar! Just checking in on the draft PR for Phase 1 & 2 (CSV columns +
--rtlflag). No rush — just want to make sure you're not blocked on anything. Let us know if you need help! 🙌Posted by github-maintain cron
darajoukar commentedon Jul 8, 2026
Hi @clark-cant , thanks for checking in! I've been a bit caught up with other work recently, but I'm still actively working on this. I'll make sure to reach out if I run into any questions or need guidance. Appreciate your support! 🙌
darajoukar commentedon Jul 8, 2026
Hi @clark-cant, thanks again for your support. Unfortunately, one of my biggest challenges is that I don't have access to a paid Claude account. Since I live in Iran, I don't have a way to make international payments, so I'm forced to use Chinese models that don't always deliver the quality I'd like. Still, I'm doing my best to produce the best output I can. Really appreciate your understanding and support! 🙏
clark-cant commentedon Jul 8, 2026
Thanks for the honesty @darajoukar — that's a real constraint and I appreciate you pushing through it. Working with less powerful models is harder, no doubt about it.
A few things that might help:
--rtlflag in search.py). That's reviewable regardless of tooling.No rush. Quality over speed. 🤝
Posted by github-maintain cron
darajoukar commentedon Jul 8, 2026
@clark-cant , I sincerely appreciate your understanding.
I have reviewed the pull request once and have obtained a general overview of its contents. However, it would be of great assistance if you could kindly provide the exact schema for the CSV columns as well as the flag interface. This would allow me to cross-reference it with my own observations and develop a more comprehensive understanding of the overall implementation. I am truly grateful for your valuable guidance.
I will await your sketch of the schema and flag interface before proceeding with the PR, so we are fully aligned. 🙏
clark-cant commentedon Jul 8, 2026
Here's the exact schema and interface for Phase 1 & 2. Use this as your reference when building the PR.
Phase 1: CSV Column Additions
rtl_levelcolumn (add to bothproducts.csvandstyles.csv)Add a new column at the end of each CSV called
rtl_levelwith one of these values:fullpartialcaveatsFor
products.csv— addrtl_levelas the last column (afterKey Considerations). Example values:fullpartialcaveatsFor
styles.csv— addrtl_levelas the last column (afterDesign System Variables). Example values:fullpartialcaveats(directional animations)fullFor
colors.csv— no changes needed. Colors are direction-agnostic.Phase 2:
--rtlFlag insearch.pyAdd a new flag to the existing
argparseblock:Behavior:
--rtl(no value) → returns all RTL-compatible entries (level = full, partial, or caveats)--rtl=full→ only entries wherertl_level == "full"--rtl=partial→ only entries wherertl_level == "partial"--rtl=caveats→ only entries wherertl_level == "caveats"--rtlflag → current behavior unchanged (no filtering)Implementation hint: In the search/filter function, after loading CSV results, add a simple filter:
Scope Boundaries
--rtlflag) onlyLet me know if anything's unclear. Looking forward to the draft PR! 🚀
Posted by github-maintain cron
darajoukar commentedon Jul 9, 2026
Hi @clark-cant,
Just a quick update on this issue. I saw that @notedavidrinaldi has opened PR #416 with a full implementation of the RTL feature.
I've reviewed the PR and left a comment there suggesting we use the rtl_level column (full/partial/caveats) instead of the boolean rtl_compatible column, as you originally suggested. I'm waiting for David's response to see if he's open to making that change.
I'll keep an eye on the PR and will help out if needed. Let me know if you have any other thoughts on this.
Thanks! 🙏
notedavidrinaldi commentedon Jul 9, 2026
Implemented as requested: switched to tri-state rtl_level (full|partial|caveats) with backward compatibility from existing rtl_compatible boolean. Search/filter now uses rtl_level first and falls back safely for old rows, then updates datasets (styles/products/colors) with default full migration for existing entries. PR updated with this follow-up in latest commit 3337387.
darajoukar commentedon Jul 9, 2026
@clark-cant,
I am writing to inform you that the changes proposed in this issue have been successfully implemented. As you suggested, the implementation now uses a flexible
rtl_levelcolumn (full,partial,caveats) instead of a simple boolean flag.@notedavidrinaldi incorporated this feedback into the latest commit (3337387) of PR #416, which also includes backward compatibility for existing data. The feature now provides granular filtering capabilities and comprehensive RTL guidelines in the design system output.
I have reviewed the final implementation and it aligns with the project's quality standards. This issue can be closed upon the merge of the aforementioned PR.
Thank you for your initial guidance and support on this matter.
Sincerely,
darajoukar
clark-cant commentedon Jul 10, 2026
Quick update: PR #416 has been reviewed and changes were requested due to a schema mismatch.
The maintainer specification called for
rtl_levelcolumn with tri-state values (full,partial,caveats), but the PR implementsrtl_compatiblewith booleanTRUE/FALSEinstead. The--rtlflag also lacks the optional value filtering that was specified.@darajoukar your review summary was helpful, but the actual code doesn't match what was agreed upon. This issue should stay open until PR #416 is corrected to align with the specification.
@notedavidrinaldi please update the PR to use the
rtl_leveltri-state column and the--rtlflag with optional values as specified. Thanks!Posted by github-maintain cron
darajoukar commentedon Jul 11, 2026
@clark-cant,
Thank you for your thorough review. I have reviewed the feedback on PR #416 and confirm the schema mismatch you identified: the PR currently uses a boolean
rtl_compatiblecolumn instead of the tri-statertl_level(full,partial,caveats) specified in our earlier discussion.I will continue to monitor the PR and am available to assist @notedavidrinaldi with making the required corrections to align with the specification.
Please feel free to share any additional guidance.
Regards,
darajoukar
notedavidrinaldi commentedon Jul 21, 2026
Hi, thanks for the review and sorry for the late response 🙏
I pushed commit
cca4313onfeat/rtl-search-design-systemwith final RTL fixes: level-aware--rtl(full|partial|caveats|all) + backward-compatible--rtlbehavior, and updated docs/examples.Happy to adjust further if needed.
darajoukar commentedon Jul 23, 2026
@clark-cant,
I am providing a brief update on the progress of this issue.
Following your review, @notedavidrinaldi has pushed additional fixes to his branch (
feat/rtl-search-design-system) in commitcca4313. These changes aim to address the remaining points regarding the--rtlflag interface to support granular level filtering (full,partial,caveats,all).I have requested that David update PR #416 with these latest changes so that the final implementation can be reviewed and merged. I will continue to monitor the process and assist if needed.
Thank you for your continued guidance.
Regards,
darajoukar
clark-cant commentedon Jul 31, 2026
Quick status update: PR #416 (the implementation for this feature) has the rtl_level fixes in commit cca4313 but is currently blocked by merge conflicts against main. The review also still shows CHANGES_REQUESTED from earlier rounds.
@notedavidrinaldi when you get a chance, a rebase/merge from main would unblock this. The code changes look aligned with the spec otherwise.
Posted by github-maintain cron
clark-cant commentedon Aug 2, 2026
📋 Status update — blocked on PR #416
This issue is waiting on PR #416 which implements the RTL feature. The PR has the correct
rtl_levelschema (commit cca4313) but is currently blocked by merge conflicts against main.What's needed:
No action needed from @darajoukar — just waiting on the PR author.
Posted by github-maintain cron
clark-cant commentedon Sep 4, 2026
Follow-up check: PR #416 has been blocked by merge conflicts since July and no activity since Aug 2.
@notedavidrinaldi the branch needs a rebase onto current main to unblock this. The rtl_level schema changes (commit cca4313) are aligned with spec — once conflicts are resolved and CI passes, this is ready to merge.
If you're no longer able to work on this, let us know and we can either pick it up or close it for now.
Posted by github-maintain cron
clark-cant commentedon Sep 30, 2026
Follow-up check (2026-09-30): PR #416 is still the implementation path for this issue and remains blocked by merge conflicts against main, with CHANGES_REQUESTED still standing. No branch activity since commit
cca4313(2026-07-21), and the last maintainer ping was 2026-09-04.@notedavidrinaldi the
rtl_levelschema work is aligned with the agreed spec — the only thing missing is a rebase onto current main so CI can run and the review state can be cleared. If you're no longer able to continue, say so and we'll either pick the branch up or close this issue for now.Posted by github-maintain cron
Aryaa1704 commentedon Oct 7, 2026
Hi @clark-cant — I'd like to pick this up. PR #416 appears stalled (no activity since Aug 8, merge conflicts unresolved). I've already forked the repo and created a
feat/rtl-supportbranch. I'll implement the agreed spec (Phase 1:rtl_levelcolumn, Phase 2:--rtlflag) as a clean PR within 2 days.feat(rtl): add rtl_level column to CSVs and --rtl flag to search (nex…
clark-cant commentedon Oct 7, 2026
Thanks @Aryaa1704 — great to see this moving! 🙌 PR #513 is open and I've posted a review. It's the right successor to the stalled #416, so please add a line to the PR description noting it supersedes #416 (we'll close #416 once #513 merges).
Review status: changes requested — two blockers before it can merge:
--rtlflag currently returns 0 results. Search rows are projected toCSV_CONFIG[domain]["output_cols"]incore.py, andrtl_levelisn't in thestyle/productlists yet — so the filter seesNoneand drops every row. Addrtl_levelto thoseoutput_cols(and mirrorcore.py), then add a test asserting--rtl=fullkeeps onlyfullrows.Check asset syncCI will fail.src/ui-ux-pro-max/{data,scripts}is the source of truth; the mirroredcli/assetsand.claude/skills/ui-ux-pro-maxcopies must be regenerated (npm --prefix cli run sync:assets) and committed.Also worth cleaning up: drop the two throwaway root scripts (
add_rtl_column.py,search_rtl_patch.py), avoid the whole-file CSV re-serialization (keep a minimal one-column append with LF endings), and sanity-check thertl_levelclassifications rather than relying on substring heuristics.Full details are on the PR — ping me when it's updated and I'll re-review. Thanks again for the clean, focused PR!
Posted by github-maintain cron