Skip to content

Chore/frontend rebuild - #1

Merged
NSTKrishna merged 10 commits into
mainfrom
chore/frontend-rebuild
Oct 3, 2026
Merged

NSTKrishna merged 10 commits into
mainfrom
chore/frontend-rebuild

Conversation

@NSTKrishna

Copy link
Copy Markdown
Owner

This pull request introduces several foundational improvements and cleanup tasks to the EduNerve AI frontend. The most important changes include a new product definition document, a streamlined and more accurate README.md, the addition of a CI workflow, improved accessibility and theming, dependency cleanup, and the removal of unused code.

Project documentation and definition:

  • Added a comprehensive PRODUCT.md describing the platform's purpose, audience, features, constraints, and principles.
  • Rewrote README.md to accurately reflect the current product, focusing on voice mock interviews, feedback, and the actual tech stack and usage instructions.

Tooling and configuration:

  • Added a .github/workflows/ci.yml GitHub Actions workflow for CI: runs install, lint, test, and build steps on pushes and pull requests.
  • Added .env.example with the required VITE_API_URL variable for backend configuration.
  • Updated package.json to clean up dependencies, add test scripts, and clarify the project name and version. [1] [2]

Accessibility, theming, and branding:

  • Updated index.html to set a new SVG favicon, add a descriptive meta tag, preload fonts, and apply the saved theme before first paint for a better user experience.
  • Refactored src/App.jsx to support code splitting with React.lazy, add a skip-to-content link for accessibility, and wrap the app in ThemeProvider and ToastProvider. [1] [2]

Code cleanup:

  • Removed unused animations from src/App.css.
  • Deleted the obsolete src/components/Home.jsx file.

NSTKrishna and others added 9 commits October 3, 2026 16:21
Drops the screens that ran on hardcoded fixtures rather than the API: the
Home and Interview prototypes, the quiz hub and practice pages, and the
dashboard's overview and feedback panels.

- Deletes src/data/mockData.js and continueContent.js, the fixture source
  every one of these read from
- Removes the duplicate dashboard shell (dashboard-layout.jsx) and Navbar,
  superseded by the DashboardLayout and LearningSidebar pair
- Drops the unused logo.png, vite.svg and react.svg assets
- Replaces tailwind.config.js with the @tailwindcss/vite plugin; theme now
  lives in CSS rather than a JS config
- Converts the remaining TypeScript shims to JS (lib/utils.ts -> utils.js)
  and drops the unused ui/button.tsx
- Adds Vitest with a jsdom environment and a GitHub Actions workflow
- Ignores .env while keeping .env.example tracked, so the required
  VITE_API_URL is documented without shipping a value
Centralises every backend call in one module so screens never build URLs
or branch on message text.

- lib/api.js throws a typed ApiError carrying a stable `code`; session
  expiry codes trigger a global logout through a registered handler
- LearnerContext restores the session from a cached profile when the
  server is unreachable, instead of signing the user out
- useVapiInterview holds call state in refs so Vapi's callbacks cannot
  read stale values, and submits the transcript exactly once
- lib/format.js owns the 0-10 score scale, duration and date formatting
- Pins the 0-10 score scale so a score can never render as a percentage
- Covers ApiError codes and the session-expiry path
- Renders the dashboard, history, report, settings and interview pages
  against a mocked API
Replaces ad-hoc palette classes with one semantic token layer. Results
read as work marked up in the margin: hairlines divide, annotation colour
carries judgement, and nothing is fenced by a drop-shadowed card.

- Four annotation marks, each in four parts (ink, wash, wash-ink, rule):
  red correction, green tick, ochre caution, blue note
- Both themes are designed, not flipped; dark is a warm near-black that
  keeps the paper's temperature rather than a blue-black slate
- Every text pair clears 4.5:1 in both themes; the four chart hues are
  validated for normal vision and protan/deutan/tritan separation
- Loads Bricolage Grotesque for display, Geist for UI and Geist Mono for
  measurement, with a pre-paint script so dark mode never flashes
- Themes the browser surfaces the design system usually forgets:
  selection, caret, scrollbar, focus ring, underline offset, numerals
- Drops components/grid.jsx, whose fixed grid overlay double-painted the
  one already on body

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The old primitives were bypassed by every screen that mattered: Button's
primary variant rendered near-black, so each real call-to-action
overrode it inline, and three different spinners shipped at once.

- Button and ButtonLink share one variant matrix, so a link that looks
  like a button is the same object as a button
- One Spinner and one Skeleton, both animated with the world's own
  keyframes rather than Tailwind's stock spin and pulse
- Dialog traps focus, closes on Escape and restores focus to its opener
- PasswordInput adds a reveal toggle; inputs wire label, hint and error
  through aria-describedby and aria-invalid
- ScoreBar and StatusBadge name the band in words, so score quality is
  never carried by colour alone
- Cards are hairline-bounded sheets with no elevation shadow

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Every screen is a register page: one enormous figure against small mono
labels, hairline division, and the margin rule down the left.

- The report is the memorable moment: marks sit in a margin column
  beside the transcript rather than stacked above it as a verdict. They
  are labelled session-level because the API returns strengths, weak
  areas and notes as flat arrays with no turn reference
- Dashboard leads with the average score; the row of equal stat tiles
  above a line chart is gone, replaced by one ruled register line
- Login and Sign-up collapse into a shared AuthLayout, removing a 90%
  duplicate, and gain a password reveal
- History dims the list in place while refiltering instead of blanking
  the page, so the thing being compared against stays on screen
- The out-of-tokens state says plainly that top-ups do not exist yet
  rather than pointing at a screen that cannot help
- Skip link, aria-current on nav, focus-trapped mobile drawer, and a
  page title in the mobile header that no longer scrolls away
- The landing proves the mechanism with a labelled sample report and
  drops the unverified "7+ roles / 40+ technologies" counters

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Documents the real feature set, the local setup including VITE_API_URL,
the script table, the project layout and the Vercel deploy, and points
at the backend repo's API_CONTRACT.md for the endpoint shapes.
- PRODUCT.md captures the confirmed audience, the stack-specific
  positioning, the token economy, and the facts that must not be
  invented: no pricing, testimonials, customers or brand assets exist
- It also records that mark attribution is session-level and undecided
  beyond that, with the constraint that no surface may imply per-answer
  attribution until the API returns a turn reference
- DESIGN.md replaces a captured analysis of an unrelated company's
  brand, which was never this product's system, with the tokens, type
  ramp, marks and rules actually in the code

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 3, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
edu-nerve-ai-frontend Ready Ready Preview Oct 3, 2026 11:01am UTC

Co-authored-by: NSTKrishna <178726204+NSTKrishna@users.noreply.github.com>
@NSTKrishna
NSTKrishna merged commit 45fb007 into main Oct 3, 2026
4 checks passed

This branch was successfully deployed

1 active deployment
Preview — 83b5e791 Deployed Oct 3, 2026 by vercel[bot]
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