Component 01
SelectedApplication Architecture
Is Nora a client-server web app, a single full-stack app, or something else?
Separate SPA + API server
Our selectionPros
- Frontend and backend can each use the best language for the job (TypeScript for UI, Python for AI)
- Clean JSON API boundary (spec I7) that is easy to test and document
- Each half ships as its own container, which suits OpenShift
Cons
- Two codebases and two build pipelines
- Needs a proxy so the browser talks to one origin
Pros
- One codebase and one deploy; server and client code side by side
- We already use it for this team website
Cons
- Pushes the backend into JavaScript, away from Python's RAG and data tooling
- Best experience is on Vercel; self-hosting a Node server on OpenShift is more work
Pros
- Python end to end, with built-in admin and auth
- No separate frontend build
Cons
- Interactive pieces (chat-style Ask flow, live dashboard charts) are awkward without a JS framework
- Template UI is harder to make feel modern
Our selection
A browser-based React single-page app talks to a FastAPI server over JSON, and the server talks to PostgreSQL and the external AI APIs. The frontend only ever calls relative /api paths, forwarded by Vite in development and by nginx in production, so there is no CORS setup. This split lets us keep the AI work in Python while the UI uses mainstream React tooling. There is no specific hardware or OS target: Nora runs in any modern desktop or mobile browser (spec NF1).