Skip to main content
Version: Sprint 4

The Tech Stack

Application Stack​

LayerTechnology / declared rangeRole
UISolidJS ^1.9.14Fine-grained reactive signals/stores and JSX components
Application frameworkSolidStart ^2.0.0File-based pages and server API handlers
Routing / metadata@solidjs/router ^1.0.0, @solidjs/meta ^0.29.4Navigation and page metadata
BuildVite ^8.0.0Development server and production bundling
Server runtimeNitro ^3.0.260610-betaSSR/API output and selectable deployment preset
StylingTailwind CSS / Vite plugin ^4.3.3Utility styling alongside custom retro CSS
Text editorCodeMirror ^6.0.2Source and test editing, highlighting, completion, diagnostics
Diagram editorBrowser Canvas 2D APICustom state/transition drawing and pointer interaction
Compiler and simulationProject TypeScript modulesLexer, parser, analyzer, assembler, finalization, simulator, marker, grader, trace
AuthenticationBetter Auth ^1.7.0GitHub/Google sign-in and sessions
DatabasePostgreSQL via pg ^8.23.0Identity, document metadata, learning progress, and collaboration history
CollaborationYjs ^13.6.33, y-websocket ^3.1.0, y-codemirror.next ^0.3.6Shared code, tests, positions, editor selections, presence
WebSocket servicews ^8.18.0, @y/websocket-server ^0.1.0Dedicated room service, separate from the Nitro app
Markdownmarked ^18.1.0AI response rendering; problem statements use a custom Markdown-subset renderer
AI serviceGroq HTTP APIContext-aware assistant; called with fetch, not an SDK
Runtime / deploymentNode.js >=24, Docker, Gitea Actions; alternative Vercel workflowApplication and Yjs containers, CI, deployment

SolidJS keeps frequent machine/tape/diagram updates local to affected reactive consumers. SolidStart keeps pages and HTTP APIs in one source tree. This does not mean the whole system is one process: PostgreSQL, file storage, and the Yjs room server remain separate services.

Current Architecture​

The shared domain compiler and engine execute in the browser for editing and simulation, and on the server for puzzle authoring and grading. Problem definitions have public/private cases; daily puzzles use cookie-identified players, server budgets, and a configurable daily clock.

Collaboration and Persistence​

Yjs supplies the CRDT model, y-codemirror.next binds source editing, and y-protocols carries awareness. The dedicated server owns room documents and PostgreSQL update logging/replay. Nitro's listener plugin only forwards upgrades. Explicit saves and enabled autosave still go through the Files API and retain the latest four JSON document versions in external storage.

Development and Tests​

  • npm run dev uses concurrently ^10.0.5 to start Vite and the Yjs process.
  • npm run build runs vite build; npm start runs the Nitro Node output.
  • Vitest ^5.0.0, jsdom ^29.1.1, Solid Testing Library ^0.8.10, and V8 coverage ^5.0.0 provide engine, compiler, component, repository, and route tests. See Testing Methodology.
  • ESLint ^10.10.0, typescript-eslint ^8.70.0, and eslint-plugin-solid ^0.18.0 are declared tooling. The root manifest has no dedicated lint or type-check script and no direct typescript declaration; do not copy obsolete TypeScript version claims from earlier sprint docs.
  • Express and CORS remain declared packages, but the main app's APIs use SolidStart, not a separate Express application. The external storage service's implementation is outside the inspected repository.

Deployment​

The public editor is fla.capitalsigma.biz. The self-hosted workflow builds a Node 24 Alpine app container plus a Node 24 Slim Yjs container. A separate Vercel workflow still exists; neither should be confused with this documentation site's Cloudflare Pages deployment.

See Physical View for environment variables, network paths, workflow triggers, and observed configuration gaps.

Documentation Stack (Separate Repository)​

This site uses Docusaurus 3.10.2, React ^19.0.0, TypeScript ~6.0.2, Mermaid ^11.17.1, and panzoom ^9.4.4. Mermaid architecture diagrams and SVG wireframes document the application; they do not power its visual editor.