Poorna dev catalogue - #35
Open
Ieatfingies wants to merge 62 commits into
Open
Conversation
…into frontend-setup
…onditionally visible based on user role
Added project structure documentation for the frontend.
Added a cyberpunk theme to the home page
* Add week0 report on project familiarization Documented initial work on project tech stack and backend API routes using Hono. * docs: Add Week 0 PDF and Git_Resources.md * docs: Update README.md with mentor, mentee details Added project description, mentors, and mentees to README. * docs: add Week 1 report Ayaan (acmpesuecc#19) * feat: reactions backend (likes/dislikes) * fix: renamed games.ts to reactions.ts to avoid confusion * ft: resolved issues flagged in the review * fix: fixed some lines wrongly typed * ft: resolved issues flagged in the review * docs: Add week 0 report Sannidhi (acmpesuecc#20) Documented initial work on project tech stack and backend API routes using Hono. * Add Week1 report on GET /games endpoint implementation Implemented the GET /games discovery endpoint with dynamic filtering and pagination. Added documentation for architecture and files. * docs: added week 1 report for archita --------- Co-authored-by: Sannidhi Nayak <m.sannidhi.nayak@gmail.com> Co-authored-by: unknown <ashmitachan@gmail.com> Co-authored-by: zia <zia.kadijah007@gmail.com> Co-authored-by: Syed Ayaan Hasan <168292629+ayaanGH06@users.noreply.github.com>
* week 0 pratham -- * tags route added --------- Co-authored-by: Ashmita Chaki <ashmitachan@gmail.com> Co-authored-by: Rex-8 <133750501+Rex-8@users.noreply.github.com>
login needs to be added back , only for testing at the moment
only for testing, will be reverted
feat(frontend): initial frontend setup with full page navigation and auth
…pesuecc#18) * feat: add game request, user request system and admin moderation * fix: address review feedback by copilot - Ayaan * fix: update pagination from offset to cursor - Ayaan --------- Co-authored-by: Rex-8 <133750501+Rex-8@users.noreply.github.com>
There was a problem hiding this comment.
Pull request overview
Adds a SvelteKit-based frontend experience (Vault, game page, upload flow, admin UI) and wires up several backend routes (game submissions, reactions, tags, user requests) as groundwork for a “developer catalog/profile” feature.
Changes:
- Added multiple SvelteKit routes/pages (home, all-games, game details, upload, my-games, admin) plus shared UI components/styles.
- Introduced backend Hono routes/services for game requests, admin game moderation, reactions, tags, and user requests.
- Added dev tooling (dev.ts) and project config files for the new frontend app setup.
Reviewed changes
Copilot reviewed 56 out of 70 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| package.json | Root-level scripts/deps scaffold. |
| frontend/vite.config.ts | Vite config enabling SvelteKit plugin. |
| frontend/tsconfig.json | TS config extending SvelteKit-generated config. |
| frontend/svelte.config.js | SvelteKit adapter + preprocess setup. |
| frontend/static/favicon.svg | Added app favicon. |
| frontend/src/routes/upload/+page.ts | Route load guard for upload page. |
| frontend/src/routes/upload/+page.svelte | Upload form UI + local submission handling. |
| frontend/src/routes/my-games/+page.svelte | “My games” dashboard based on submissions store. |
| frontend/src/routes/game/[id]/+page.ts | Load a game from local mock data by id. |
| frontend/src/routes/game/[id]/+page.svelte | Game play/details page UI with iframe + reactions UI. |
| frontend/src/routes/dev-catalog/catalog.ts | Developer catalog/profile mock UI (currently mis-filed). |
| frontend/src/routes/dev-catalog/+page.svelte | dev-catalog page content (currently home-page-like). |
| frontend/src/routes/all-games/+page.svelte | All-games listing + filter/sort + store submissions merge. |
| frontend/src/routes/admin/+page.ts | Route load guard for admin page. |
| frontend/src/routes/admin/+page.svelte | Admin panel UI for requests/users (fetch + actions). |
| frontend/src/routes/admin/+page.server.ts | Server load for admin data from backend. |
| frontend/src/routes/+page.svelte | Home page using shared components. |
| frontend/src/routes/+layout.svelte | Global layout mounting globals + shared head. |
| frontend/src/routes/+layout.server.ts | Provides session via locals to layout/page data. |
| frontend/src/lib/styles/globals.css | Global cyberpunk design tokens + cursor/bg + shared styles. |
| frontend/src/lib/stores/user.js | Mock user store used by some route guards. |
| frontend/src/lib/stores/submissions.ts | Submissions store/type used across pages. |
| frontend/src/lib/stores/ratings.ts | Ratings store scaffold. |
| frontend/src/lib/index.ts | Library entry placeholder. |
| frontend/src/lib/data/games.js | Mock games data used by game route loader. |
| frontend/src/lib/components/layout/Header.svelte | Legacy header layout component (auth client usage). |
| frontend/src/lib/components/layout/Footer.svelte | Legacy footer layout component. |
| frontend/src/lib/components/UploadCTA.svelte | Upload CTA banner component. |
| frontend/src/lib/components/Navbar.svelte | Global navbar + cursor/bg + search + logout. |
| frontend/src/lib/components/MarqueeTicker.svelte | Animated ticker component. |
| frontend/src/lib/components/LoginModal.svelte | Login modal with Google sign-in redirect. |
| frontend/src/lib/components/HeroSection.svelte | Landing hero component. |
| frontend/src/lib/components/GameCard.svelte | Game card tile component used on home. |
| frontend/src/lib/components/Footer.svelte | New styled footer component. |
| frontend/src/lib/components/CategoryItem.svelte | Genre/category tile component. |
| frontend/src/hooks.server.ts | Session hydration into locals via backend /auth/session. |
| frontend/src/auth.ts | Helper to fetch session from backend API. |
| frontend/src/app.html | SvelteKit app template. |
| frontend/src/app.d.ts | App locals typing for session/user. |
| frontend/src/app.css | Minimal global html background style. |
| frontend/package.json | Frontend package config (SvelteKit + deps). |
| frontend/README.md | Frontend run instructions + template docs. |
| frontend/.npmrc | Engine strict configuration. |
| frontend/.gitignore | Frontend ignores for build artifacts/env. |
| dev.ts | Dev script to run backend+frontend concurrently (bun + npm). |
| bun.lock | Bun lockfile for root dependencies. |
| backend/src/routes/userRequests.ts | User request submission endpoint with Zod validation. |
| backend/src/routes/tags.ts | Tag CRUD-ish endpoints (create/list + tag->games). |
| backend/src/routes/reactions.ts | Like/dislike reactions endpoints with transaction logic. |
| backend/src/routes/gameRequests.ts | Game submission requests + pagination; Zod validation. |
| backend/src/routes/adminGameRoutes.ts | Admin endpoints to list/approve/reject/deactivate games. |
| backend/src/lib/gameService.ts | Fetch game with active-state validation. |
| backend/src/lib/gameRequestService.ts | Request approval + pending-limit logic. |
| backend/src/lib/errors.ts | Custom NotFound/InvalidState errors. |
| backend/src/index.ts | Registers new backend routes and updates CORS headers. |
| backend/src/db/seed.ts | Seed script for dummy user/game. |
| README.md | Expanded project docs incl. frontend structure + mentors/mentees. |
| ProgChamp | Added/updated git submodule pointer. |
| AIEP_Resources/Weekly_Reports/week0.md | Added week 0 report. |
Files not reviewed (1)
- frontend/package-lock.json: Language not supported
Comments suppressed due to low confidence (15)
frontend/src/routes/dev-catalog/catalog.ts:1
- This file contains Svelte markup but is named with a
.tsextension. If it’s included in TS checking (common with SvelteKit tsconfig includes), it will fail to parse and break the build. Rename it to a.sveltefile (or move it undersrc/lib/components/...as a component) and then render it from a route likefrontend/src/routes/dev-catalog/+page.svelteor a parameterized route.
frontend/src/routes/dev-catalog/+page.svelte:1 - The PR description says this adds a developer catalog/profile route and UI, but
dev-catalog/+page.sveltecurrently looks like a duplicate of the home/vault page (title + hero/trending/categories). If the intent is a developer profile page, consider implementing it as a parameterized route (e.g.routes/dev-catalog/[username]/+page.svelteorroutes/dev/[username]/+page.svelte) and rendering the developer profile/catalog UI there.
frontend/src/lib/data/games.js:1 - The mock
gamesarray uses inconsistent field names/types across entries (devvsdevName,ratingvsratings, missinggenre/playerson the second object). The game page (routes/game/[id]/+page.svelte) readsgame.dev,game.players,game.rating,game.genre, etc., which will break for entries that don’t follow that schema. Normalize the shape of allgamesentries (or add a mapping layer) so every game has the required fields with consistent types.
frontend/src/routes/game/[id]/+page.svelte:1 - Embedding arbitrary
game.urlin an unsandboxed iframe can allow the embedded page to attempt top-level navigation, open popups, and otherwise behave unexpectedly. Consider adding a restrictivesandboxattribute (and anallowpolicy if needed) and only loosening capabilities that the embedded games require.
frontend/src/routes/upload/+page.ts:1 - This
load()guard relies on a client-side writable store (lib/stores/user.js). In SvelteKit, route access control should be enforced on the server (e.g.,+page.server.tsusinglocals.session/user) to prevent bypass and to avoid SSR using mock/default store values. Move the authorization check server-side and base it on the authenticated session rather than a frontend store.
frontend/src/routes/upload/+page.ts:1 - This
load()guard relies on a client-side writable store (lib/stores/user.js). In SvelteKit, route access control should be enforced on the server (e.g.,+page.server.tsusinglocals.session/user) to prevent bypass and to avoid SSR using mock/default store values. Move the authorization check server-side and base it on the authenticated session rather than a frontend store.
frontend/src/routes/admin/+page.server.ts:1 - The admin authorization check is commented out. As written, the server load will fetch and return admin data even for non-admin users (depending on backend behavior), which is a data exposure risk. Re-enable the redirect (or throw 403) when
sessionis missing or the user isn’t an admin.
frontend/src/routes/my-games/+page.svelte:1 - Calling
URL.createObjectURL()in a helper that is invoked during rendering (and even multiple times per item) will create many object URLs and leak memory unless they’re revoked. Compute the URL once per submission (e.g., store it alongside the submission or memoize it in derived state) and ensure you callURL.revokeObjectURL()when thumbnails change or the component unmounts.
frontend/src/routes/my-games/+page.svelte:1 - Calling
URL.createObjectURL()in a helper that is invoked during rendering (and even multiple times per item) will create many object URLs and leak memory unless they’re revoked. Compute the URL once per submission (e.g., store it alongside the submission or memoize it in derived state) and ensure you callURL.revokeObjectURL()when thumbnails change or the component unmounts.
frontend/src/routes/upload/+page.svelte:1 - The preview uses
URL.createObjectURL(file)but the created object URL is never revoked. This leaks memory when users change the thumbnail or navigate away. Track the previouspreviewURL and callURL.revokeObjectURL(prevUrl)when replacing/clearing it, and clean up on component destroy.
frontend/src/routes/all-games/+page.svelte:1 - This mapping creates new object URLs on each recomputation, and they’re never revoked. Over time (or with frequent store updates), this can leak memory and degrade performance. Consider persisting a single object URL per submission (revoking on removal/replacement) or converting thumbnails to persistent URLs during upload.
frontend/src/lib/components/Navbar.svelte:1 - Hardcoding
http://localhost:9210will break sign-out outside local dev. Use a single configurable base URL (e.g.,import.meta.env.VITE_API_URL) consistently acrossNavbarandLoginModal, and prefer SvelteKit navigation/invalidation patterns overwindow.location.hrefwhere possible.
frontend/src/routes/upload/+page.svelte:1 - The dropzone relies on mouse drag/drop and a non-focusable label overlay, while the file input is effectively non-interactive (
width/height: 0+ hidden). This makes it hard/impossible to use via keyboard. Consider making the dropzone itself focusable (tabindex=0,role=\"button\") and handle Enter/Space to trigger file selection, while keeping a visible focus style.
frontend/src/routes/upload/+page.svelte:1 - The dropzone relies on mouse drag/drop and a non-focusable label overlay, while the file input is effectively non-interactive (
width/height: 0+ hidden). This makes it hard/impossible to use via keyboard. Consider making the dropzone itself focusable (tabindex=0,role=\"button\") and handle Enter/Space to trigger file selection, while keeping a visible focus style.
frontend/src/routes/upload/+page.svelte:1 - The Google Fonts stylesheet is already included in
routes/+layout.svelte, but it’s also repeated in multiple pages. This can cause duplicate requests and makes changes harder. Prefer keeping the font link only in the layout head and removing per-page duplicates.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| let { game, showCorner = null }: Props = $props(); | ||
| </script> | ||
|
|
||
| <a href="/game/[id]/{game.id}" class="game-card"> |
Comment on lines
+14
to
+20
| /** | ||
| * POST /reactions/:gameId/react | ||
| * Body: { type: "like" | "dislike" } | ||
| * Middleware: requireSession | ||
| * Description: React to a game | ||
| */ | ||
| reactions.post("/:gameId/react", requireSession, async (c) => { |
Comment on lines
+5
to
+11
|
|
||
| const tagsRoute = new Hono(); | ||
|
|
||
| // 1. CREATE TAG ENDPOINT (with duplicate check) | ||
| tagsRoute.post('/', async (c) => { | ||
| const { name, category } = await c.req.json(); | ||
|
|
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.
feat: add developer catalog profile route and UI
This PR introduces the developer catalog page to the frontend, allowing users to view a specific developer's profile, biography, and published games. The implementation strictly follows the established cyberpunk design system and utilizes Svelte 5 runes for state management.
Type
Changes
-added dev-catalog folder to frontend-seup
-added catalog.ts
Testing
Describe how you tested this:
Checklist
Conventional Commits