Skip to content

Decide: frontend architecture after ending Lovable relationship #152

Closed

Description

@amar-python

Decision needed

The product owner decided on 2026-11-02 to end dependency on the Lovable platform (see #69). The Lovable-generated frontend code remains in csv-table-hub-main/, calls the FastAPI backend, and runs locally without any Lovable connection.

The 4 Oct 2026 decision to adopt the Lovable-generated frontend over the hand-built React one is being revisited.

Options

  1. Keep the current code, drop the connection. csv-table-hub-main/ stays as-is. Treat it as a plain React/TypeScript codebase owned by this repo. No further Lovable syncs.
  2. Replace with Python-native. Rebuild in Reflex, NiceGUI, or Streamlit. Trade-off: solo-maintainer language consistency (Python everywhere) vs. rewrite cost.
  3. Hand-rebuild in a different frontend framework. Any JS framework the product owner prefers.
  4. Hybrid — keep existing code for now, migrate later. Explicitly defer.

Context

  • Frontend reconsideration was discussed on 2 Nov; Reflex was leaned toward then paused on the Node-at-build caveat.
  • csv-table-hub-main/ is currently functional against the live FastAPI backend. Shipping no change today is viable.
  • Rewriting in Python-native unblocks fully offline install (2026-11-15: ship air-gapped install procedure or keep interim wording #60) at a per-widget level (no npm cache to vendor).

Done when

The product owner selects an option and either:

  • (Option 1) csv-table-hub-main/ stays, this issue is closed, Lovable repo stripped of any syncing/CI, no further migration work
  • (Option 2/3) A follow-up implementation issue is filed; this one is closed as "decision made, implementation tracked separately"
  • (Option 4) This issue stays open with an explicit "deferred until " note

Related

Activity

  1. added
    decisionNeeds a product-owner decision before work starts
    on Nov 2, 2026
  2. amar-python commented on Nov 2, 2026

    @amar-python
    OwnerAuthor

    Closed — spike-then-decide (2026-11-02)

    Decision: rebuild one representative screen in Streamlit as a 1-day spike, then decide the real direction based on what the spike teaches.

    Why spike before committing

    Frontend direction has shifted three times in two weeks (Lovable → PR #40 plain HTML/JS → Reflex lean → now a learning spike). When direction keeps shifting, picking the lowest-cost option to learn fast beats picking the most ambitious option to commit hard.

    Streamlit is the lowest-cost Python-native option: ~1 day to rebuild one screen vs 2-3 days for NiceGUI or 4-5 days for Reflex. If it feels right, the spike's learning transfers to a staged migration. If it feels wrong, only a day is spent and the existing React code stays as the fallback.

    The spike

    • Target: M4 review screen (csv-table-hub-main/src/components/review-table.tsx). Most interactive screen in the app: paging, cell edits with validation, required-reason dialogs, role-based conditional UI, history popup, inline validation feedback. If Streamlit handles it, it'll handle everything else.
    • Time-box: 1 day. Hitting day two without a working review page means Streamlit isn't the fit — stop.
    • Not for shipping: this is a learning exercise, not a replacement. The React implementation stays live.

    Outcomes at end of spike

    1. Streamlit was fine, I prefer this to React. Plan staged migration, screen by screen. React stays until the last screen migrates.
    2. Streamlit was limiting but Python-native felt right. Try NiceGUI next spike (2-3 days), or commit to Reflex if Lovable-match matters more than no-Node simplicity.
    3. Python-native felt wrong. All three ruled out. Keep React code, treat csv-table-hub-main/ as owned codebase. Option 1 from this issue wins.

    Tracked in

    New spike issue filed as a follow-up. Timing: when the product owner picks it up (no fixed date). Pre-condition: comfortable PowerShell + Streamlit install on the dev machine.

    Not changed by this decision

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

    decisionNeeds a product-owner decision before work starts

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions