Skip to content

feat(frontend): Next.js scaffolding + core config model + YAML serializers - #76

Open
maan-iitd2 wants to merge 1 commit into
blackrock:mainfrom
maan-iitd2:pr/frontend-foundations
Open

feat(frontend): Next.js scaffolding + core config model + YAML serializers#76
maan-iitd2 wants to merge 1 commit into
blackrock:mainfrom
maan-iitd2:pr/frontend-foundations

Conversation

@maan-iitd2

Copy link
Copy Markdown

What

First frontend PR: InGen Studio, a Next.js 15 / React 19 SPA for building ingen YAML configs visually. This PR ships only the non-visual foundation:

  • Build scaffolding: package.json/lock, next.config.mjs, jsconfig.json (@/*src/* alias), eslint.config.js, .env* (adapter-mode config — mock: localStorage + simulated runs, no backend needed; http: talks to the FastAPI wrapper in feat(backend): thin FastAPI wrapper around the ingen CLI #75), public/ assets.
  • src/models/ — the in-memory config shape everything else depends on (configModel, types, constants), plus applyIntent/interfaceOps, the deterministic executor that turns the inChat assistant's {ops} into model mutations.
  • src/serializers/ — lossless YAML ↔ model round-trip (yamlSerializer/yamlDeserializer).
  • Two small, dependency-free helpers pulled forward from a later PR because configModel/applyIntent import them directly and won't load without them: src/utils/id.js (id generation) and src/lib/fuzzy.js (Levenshtein distance, used for inChat's "did you mean 'status'?" column-typo correction).

Not in this PR, by design: routing (src/app/), adapters/services, state/hooks, or any UI component. This PR alone does not build a running app — that lands over the next few PRs (adapters/state → app shell → editor UI), each building on this one.

Testing

  • npm install && npm run lint — clean, no errors.
  • npm run test43/43 passed, covering the config model (add/remove/rename/reorder interfaces and sources, validation), applyIntent (including a dedicated phase-5 regression suite), and the YAML serializers (round-trip losslessness, deterministic/idempotent output, key ordering, empty-section dropping).

🤖 Generated with Claude Code

…izers

Foundation for InGen Studio, a Next.js 15 / React 19 SPA for building
ingen YAML configs visually. This PR ships only the non-visual base
that later UI PRs build on:

- Build scaffolding: package.json/lock, next.config.mjs, jsconfig.json
  (@/* import alias), eslint.config.js, .env* (adapter-mode config:
  mock vs http), public/ assets.
- src/models/: the in-memory config shape everything else depends on
  (configModel, types, constants) plus applyIntent/interfaceOps, the
  deterministic executor for the inChat assistant's ops.
- src/serializers/: lossless YAML <-> model round-trip.
- src/utils/id.js, src/lib/fuzzy.js: small, dependency-free helpers
  that models/applyIntent import directly (pulled forward from the
  later state/hooks/lib wave since configModel and applyIntent need
  them to even load).

Routing, adapters/services, state, and all UI components are separate
follow-up PRs — this PR alone does not build a running app (no
src/app/ yet), by design.

## Testing

- `npm run lint` — clean.
- `npm run test` — 43/43 passed (models + serializers unit tests,
  including round-trip yaml -> model -> yaml losslessness).

Signed-off-by: maan-iitd2 <maan.iitd.ac.in@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants