Repository navigation
Chore/frontend rebuild - #1
Merged
Merged
Conversation
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>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-authored-by: NSTKrishna <178726204+NSTKrishna@users.noreply.github.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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:
PRODUCT.mddescribing the platform's purpose, audience, features, constraints, and principles.README.mdto accurately reflect the current product, focusing on voice mock interviews, feedback, and the actual tech stack and usage instructions.Tooling and configuration:
.github/workflows/ci.ymlGitHub Actions workflow for CI: runs install, lint, test, and build steps on pushes and pull requests..env.examplewith the requiredVITE_API_URLvariable for backend configuration.package.jsonto clean up dependencies, add test scripts, and clarify the project name and version. [1] [2]Accessibility, theming, and branding:
index.htmlto 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.src/App.jsxto support code splitting with React.lazy, add a skip-to-content link for accessibility, and wrap the app inThemeProviderandToastProvider. [1] [2]Code cleanup:
src/App.css.src/components/Home.jsxfile.