Skip to content

Proposal: Add RTL (Right-to-Left) Support for Multi-Platform UI-UX #409

Description

@darajoukar

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 ⚠️ with caveats)

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

  1. Data Preparation: I've already analyzed the existing CSV files and identified which styles are RTL-compatible (85% of styles work with minimal changes).
  2. Code Changes: Minimal modifications to search.py (less than 100 lines added).
  3. Testing: Will test with sample Persian/Arabic prompts to validate output quality.
  4. Documentation: Update README.md with RTL usage examples.

Questions for Maintainers

  1. Would you prefer RTL support as a flag (--rtl) or an auto-detect feature (based on language of the prompt)?
  2. Should RTL compatibility be strict (only RTL-optimized styles) or flexible (all styles with RTL warnings)?
  3. 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:

  1. Fork the repository
  2. Create a feature/add-rtl-support branch
  3. Implement Phase 1–3 as a single PR
  4. 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

  1. clark-cant commented on Jul 4, 2026

    @clark-cant
    Contributor

    Thanks for the detailed proposal @darajoukar! This is a well-structured plan. Quick answers to your questions:

    1. Flag vs auto-detect: We'd prefer a --rtl flag for explicit control, with auto-detect as a future enhancement.
    2. Strict vs flexible: Flexible approach — tag entries with RTL compatibility levels (full/partial/needs-work) rather than binary.
    3. Existing plans: No active RTL work, so this would be welcome.

    Your phased approach looks solid. Phase 1-3 as a single PR is reasonable. A few notes:

    • The rtl_compatible column in CSVs should probably be rtl_level with values: full, partial, caveats instead of TRUE/FALSE.
    • For the search engine, consider --rtl accepting optional values (e.g., --rtl=full for strict filtering).
    • Phase 4 templates can be separate follow-up PRs to keep the main PR focused.

    Go ahead with the fork + draft PR approach. We'll review early. 🚀

  2. darajoukar commented on Jul 4, 2026

    @darajoukar
    Author

    @clark-cant
    Thank you for the quick and positive feedback!

    I'll start with Phase 1 & 2 as you suggested (CSV columns + --rtl flag) 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!

  3. clark-cant commented on Jul 6, 2026

    @clark-cant
    Contributor

    Thanks for the update @darajoukar! 👍

    Focusing on Phase 1 & 2 first is the right call — CSV columns + --rtl flag 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

  4. clark-cant commented on Jul 8, 2026

    @clark-cant
    Contributor

    Hey @darajoukar! Just checking in on the draft PR for Phase 1 & 2 (CSV columns + --rtl flag). 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

  5. darajoukar commented on Jul 8, 2026

    @darajoukar
    Author

    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! 🙌

  6. darajoukar commented on Jul 8, 2026

    @darajoukar
    Author

    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! 🙏

  7. clark-cant commented on Jul 8, 2026

    @clark-cant
    Contributor

    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:

    • You don't need Claude for this — any model that can write Python and CSV edits will work fine for Phase 1 & 2.
    • Keep the PR small and focused (CSV column additions + --rtl flag in search.py). That's reviewable regardless of tooling.
    • If you want, I can sketch out the exact CSV column schema and flag interface so you have less to figure out from scratch. Just say the word.

    No rush. Quality over speed. 🤝

    Posted by github-maintain cron

  8. darajoukar commented on Jul 8, 2026

    @darajoukar
    Author

    @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. 🙏

  9. clark-cant commented on Jul 8, 2026

    @clark-cant
    Contributor

    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_level column (add to both products.csv and styles.csv)

    Add a new column at the end of each CSV called rtl_level with one of these values:

    Value Meaning
    full Works in RTL with zero changes — direction-agnostic layout
    partial Works in RTL with minor adjustments (swap padding, mirror icons)
    caveats Works but has significant RTL caveats (complex animations, directional patterns)

    For products.csv — add rtl_level as the last column (after Key Considerations). Example values:

    • SaaS (General) → full
    • Dashboard-heavy products → partial
    • Anything with left-to-right timeline patterns → caveats

    For styles.csv — add rtl_level as the last column (after Design System Variables). Example values:

    • Minimalism & Swiss Style → full
    • Glassmorphism → partial
    • Motion-Driven → caveats (directional animations)
    • Brutalism → full

    For colors.csv — no changes needed. Colors are direction-agnostic.


    Phase 2: --rtl Flag in search.py

    Add a new flag to the existing argparse block:

    parser.add_argument(
        "--rtl",
        nargs="?",
        const="all",
        choices=["all", "full", "partial", "caveats"],
        default=None,
        help="Filter results by RTL compatibility level (only with --domain style or product)"
    )

    Behavior:

    • --rtl (no value) → returns all RTL-compatible entries (level = full, partial, or caveats)
    • --rtl=full → only entries where rtl_level == "full"
    • --rtl=partial → only entries where rtl_level == "partial"
    • --rtl=caveats → only entries where rtl_level == "caveats"
    • No --rtl flag → current behavior unchanged (no filtering)

    Implementation hint: In the search/filter function, after loading CSV results, add a simple filter:

    if args.rtl is not None:
        if args.rtl == "all":
            results = [r for r in results if r.get("rtl_level") in ("full", "partial", "caveats")]
        else:
            results = [r for r in results if r.get("rtl_level") == args.rtl]

    Scope Boundaries

    • This PR: Phase 1 (CSV columns) + Phase 2 (--rtl flag) only
    • Not in this PR: Phase 3 (design system output section) and Phase 4 (stack templates) — those are follow-up PRs
    • Keep it small: ~3 new columns across 2 CSVs + ~15-20 lines in search.py

    Let me know if anything's unclear. Looking forward to the draft PR! 🚀

    Posted by github-maintain cron

  10. darajoukar commented on Jul 9, 2026

    @darajoukar
    Author

    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! 🙏

  11. notedavidrinaldi commented on Jul 9, 2026

    @notedavidrinaldi

    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.

  12. darajoukar commented on Jul 9, 2026

    @darajoukar
    Author

    @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_level column (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

  13. clark-cant commented on Jul 10, 2026

    @clark-cant
    Contributor

    Quick update: PR #416 has been reviewed and changes were requested due to a schema mismatch.

    The maintainer specification called for rtl_level column with tri-state values (full, partial, caveats), but the PR implements rtl_compatible with boolean TRUE/FALSE instead. The --rtl flag 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_level tri-state column and the --rtl flag with optional values as specified. Thanks!

    Posted by github-maintain cron

  14. darajoukar commented on Jul 11, 2026

    @darajoukar
    Author

    @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_compatible column instead of the tri-state rtl_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

  15. notedavidrinaldi commented on Jul 21, 2026

    @notedavidrinaldi

    Hi, thanks for the review and sorry for the late response 🙏
    I pushed commit cca4313 on feat/rtl-search-design-system with final RTL fixes: level-aware --rtl (full|partial|caveats|all) + backward-compatible --rtl behavior, and updated docs/examples.
    Happy to adjust further if needed.

  16. darajoukar commented on Jul 23, 2026

    @darajoukar
    Author

    @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 commit cca4313. These changes aim to address the remaining points regarding the --rtl flag 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

  17. clark-cant commented on Jul 31, 2026

    @clark-cant
    Contributor

    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

  18. clark-cant commented on Aug 2, 2026

    @clark-cant
    Contributor

    📋 Status update — blocked on PR #416

    This issue is waiting on PR #416 which implements the RTL feature. The PR has the correct rtl_level schema (commit cca4313) but is currently blocked by merge conflicts against main.

    What's needed:

    • @notedavidrinaldi needs to rebase/merge from main to resolve conflicts
    • Once the PR is mergeable and CI passes, it can be merged and this issue closed

    No action needed from @darajoukar — just waiting on the PR author.

    Posted by github-maintain cron

  19. clark-cant commented on Sep 4, 2026

    @clark-cant
    Contributor

    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

  20. clark-cant commented on Sep 30, 2026

    @clark-cant
    Contributor

    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_level schema 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

  21. Aryaa1704 commented on Oct 7, 2026

    @Aryaa1704

    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-support branch. I'll implement the agreed spec (Phase 1: rtl_level column, Phase 2: --rtl flag) as a clean PR within 2 days.

  22. clark-cant commented on Oct 7, 2026

    @clark-cant
    Contributor

    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:

    1. The --rtl flag currently returns 0 results. Search rows are projected to CSV_CONFIG[domain]["output_cols"] in core.py, and rtl_level isn't in the style/product lists yet — so the filter sees None and drops every row. Add rtl_level to those output_cols (and mirror core.py), then add a test asserting --rtl=full keeps only full rows.
    2. Check asset sync CI will fail. src/ui-ux-pro-max/{data,scripts} is the source of truth; the mirrored cli/assets and .claude/skills/ui-ux-pro-max copies 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 the rtl_level classifications 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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions