Skip to content

feat: complete frontend implementation — landing page, mock pages, theme system, and UI components - #13

Merged
SharanyoBanerjee merged 5 commits into
Omnikon-Org:mainfrom
SourabhX16:feat/frontend-app-shell
Jun 29, 2026
Merged

feat: complete frontend implementation — landing page, mock pages, theme system, and UI components#13
SharanyoBanerjee merged 5 commits into
Omnikon-Org:mainfrom
SourabhX16:feat/frontend-app-shell

Conversation

@SourabhX16

@SourabhX16 SourabhX16 commented Jun 29, 2026

Copy link
Copy Markdown
Member

Summary

Complete frontend implementation covering the landing page, all mock product pages, shared UI components, mock data layer, state management, and a global dark/light theme system.

43 files changed, 1,711 insertions, 130 deletions

What's Included

Landing Page (rebuilt from scratch)

  • Full hero section with brand identity, tagline, CTA buttons
  • Live Module preview card with Decode/Rebuild/Defend phases
  • Feature cards (Blindspots, War Rooms, Code memory) moved above the fold
  • Responsive layout optimized for 1920x1080 and common laptop resolutions
  • Theme toggle in the header

Global Theme System

  • ThemeProvider wrapping root layout with dark/light radial gradient backgrounds
    • Dark: #000000 → #010133
    • Light: #ffffff → #ec4899
  • localStorage persistence via Zustand store
  • ThemeController toggle button on all pages

Mock Product Pages (6 pages)

Page Features
/app/dashboard IRS score, rank, streak, active track, radar chart, leaderboard
/app/tracks Browse tracks with progress and difficulty badges
/app/tracks/[trackId]/modules/[moduleId] Full module player (Decode → Rebuild → Defend)
/app/war-room Live chat feed with mock socket events, leaderboard
/app/blindspot-map Weak concept visualization with severity tracking
/app/profile IRS radar chart, streak, session info, recent modules

Shared UI Components (7)

Button, Badge, Card, Input, Progress, Textarea — all matching the shadcn/ui pattern with Tailwind CSS variables

Feature Components (10)

ModulePlayer, CodeEditor (Monaco), AnnotationEditor, QuizUI, CodeSubmission, DiffViewer, IRSRadarChart, Leaderboard, StreakTracker, WarRoomLive

Mock Data Layer

  • Types, data, API functions with simulated latency, and TanStack Query hooks
  • Realistic mock data for tracks, modules, annotations, quizzes, leaderboard, war room messages, blindspots

State Management (Zustand)

  • auth-store.ts — mock auth state
  • editor-store.ts — code editor phase/state
  • ui-store.ts — dark mode with localStorage persistence + sidebar

Auth Pages

  • /auth/signin — OAuth buttons + mock workspace entry
  • /auth/signup — account creation with mock flow

Testing

  • pnpm lint
  • pnpm build
  • All 13 pages compile as static routes

Before

The app was a Next.js starter template. The landing page showed only the default Next.js boilerplate. No theme system, no product pages, no mock data — just an empty shell.

After

The entire frontend is built out:

  • Full landing page with hero section, live module preview, and feature cards
  • 6 mock product pages (Dashboard, Tracks, Module Player, War Room, Blindspot Map, Profile)
  • Global dark/light theme with radial gradient backgrounds and localStorage persistence
  • 7 shared UI components (Button, Badge, Card, Input, Progress, Textarea)
  • 10 feature components (Monaco editor, diff viewer, quiz, radar chart, etc.)
  • Mock data layer with TanStack Query hooks
  • Zustand stores for auth, editor, and UI state
Untitled.design.mp4

- Add ThemeProvider wrapping root layout with dark/light radial gradients
- Add localStorage persistence for theme preference via Zustand store
- Add ThemeController toggle to landing page header
- Consolidate dark class toggling into ThemeProvider
- Remove opaque bg-background from body and page wrappers to reveal gradient
- Improve landing page spacing and move feature cards above the fold
- Ensure all pages (landing, dashboard, auth) respect global theme
@mergify

mergify Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Tick the box to add this pull request to the merge queue (same as @mergifyio queue).

  • Queue this pull request

@SharanyoBanerjee SharanyoBanerjee left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@SourabhX16
Solid foundation — the component structure is clean, mock data layer is well-typed, and the page patterns are consistent. A few things to address before merging:

‎⁠params⁠ needs ‎⁠await⁠ in App Router
‎⁠ModulePage⁠ destructures ‎⁠params⁠ synchronously (‎⁠{ params }: { params: { trackId: string; moduleId: string } }⁠), but in Next.js 15+ App Router, ‎⁠params⁠ is a Promise. This will break at runtime. Use ‎⁠const { trackId, moduleId } = await params⁠ or wrap with ‎⁠use()⁠.

Hardcoded ‎⁠className="dark"⁠ on ‎⁠⁠ conflicts with theme toggle
‎⁠layout.tsx⁠ sets ‎⁠⁠, but ‎⁠ThemeProvider⁠ toggles the ‎⁠dark⁠ class via ‎⁠useEffect⁠. On light mode, users will see a dark flash before hydration flips the class. Remove the hardcoded class and let the provider handle it, or use a blocking ‎⁠<script>⁠ to set it before paint.

Monaco editor ignores theme setting
‎⁠code-editor.tsx⁠ hardcodes ‎⁠theme="vs-dark"⁠ regardless of whether the user is in light or dark mode. Wire it to ‎⁠useUIStore⁠’s ‎⁠darkMode⁠.

Auth flow: ‎⁠asChild⁠ + ‎⁠onClick⁠ on the same Button
In ‎⁠signin/page.tsx⁠ and ‎⁠signup/page.tsx⁠, ‎⁠⁠ wraps a ‎⁠⁠. With ‎⁠asChild⁠, the Button renders as the Link — the ‎⁠onClick⁠ may not fire reliably before navigation. Call ‎⁠signIn⁠ inside an ‎⁠onClickCapture⁠ or handle it in a route guard instead.

Minor

  • ‎⁠war-room-live.tsx⁠ calls ‎⁠getSocket().connect()⁠ but the socket isn’t used for any events — only a ‎⁠setInterval⁠ generates messages. Either remove the socket wiring or add a TODO.

  • ‎⁠ThemeProvider⁠‘s inline gradient backgrounds (‎⁠#010133⁠, ‎⁠#ec4899⁠) aren’t connected to the CSS variable system. If the theme palette changes, these won’t update.

Architecture and component decomposition look good overall. Nice work getting the full app shell navigable with mock data.

@SharanyoBanerjee
SharanyoBanerjee merged commit ed4838c into Omnikon-Org:main Jun 29, 2026
2 checks passed
@SourabhX16

Copy link
Copy Markdown
Member Author

Hi — thank you for the thorough review and for merging the PR. I really appreciate the time you spent , your feedback was very helpful. I’ll start working on the items you listed. Plan: I’ll start on these immediately and push fixes to a follow-up PR .Thanks again for the review and for merging ,much appreciated. 😄
— Sourabh

@SharanyoBanerjee

Copy link
Copy Markdown
Contributor

@SourabhX16 It's great to hear you have taken those things into consideration , I am assigning the issue to you , take your time . Thank you .

  • Sharanyo

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