Skip to content

Poorna dev catalogue - #35

Open
Ieatfingies wants to merge 62 commits into
acmpesuecc:mainfrom
Ieatfingies:poorna-dev-catalogue
Open

Poorna dev catalogue#35
Ieatfingies wants to merge 62 commits into
acmpesuecc:mainfrom
Ieatfingies:poorna-dev-catalogue

Conversation

@Ieatfingies

Copy link
Copy Markdown
Contributor

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

  • [x ] feat: new feature
  • fix: bug fix
  • docs: documentation
  • refactor: code restructuring
  • test: tests only
  • chore: maintenance

Changes

-added dev-catalog folder to frontend-seup
-added catalog.ts


Testing

Describe how you tested this:

  • Unit tests added/updated
  • Manual testing performed
  • All tests pass locally

Checklist

  • [x ] Code follows project style
  • [x ] Commit messages follow Conventional Commits
  • [x ] No API keys or sensitive data in code

ashyune and others added 30 commits January 15, 2026 19:53
Added project structure documentation for the frontend.
Added a cyberpunk theme to the home page
Thisissandy07 and others added 23 commits March 9, 2026 18:37
* 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>
@Rex-8
Rex-8 requested a review from Copilot March 14, 2026 19:45

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

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 .ts extension. 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 .svelte file (or move it under src/lib/components/... as a component) and then render it from a route like frontend/src/routes/dev-catalog/+page.svelte or 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.svelte currently 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.svelte or routes/dev/[username]/+page.svelte) and rendering the developer profile/catalog UI there.
    frontend/src/lib/data/games.js:1
  • The mock games array uses inconsistent field names/types across entries (dev vs devName, rating vs ratings, missing genre/players on the second object). The game page (routes/game/[id]/+page.svelte) reads game.dev, game.players, game.rating, game.genre, etc., which will break for entries that don’t follow that schema. Normalize the shape of all games entries (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.url in an unsandboxed iframe can allow the embedded page to attempt top-level navigation, open popups, and otherwise behave unexpectedly. Consider adding a restrictive sandbox attribute (and an allow policy 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.ts using locals.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.ts using locals.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 session is 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 call URL.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 call URL.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 previous preview URL and call URL.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:9210 will break sign-out outside local dev. Use a single configurable base URL (e.g., import.meta.env.VITE_API_URL) consistently across Navbar and LoginModal, and prefer SvelteKit navigation/invalidation patterns over window.location.href where 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();

Comment thread backend/src/routes/gameRequests.ts
@Rex-8
Rex-8 requested review from ashyune and zia0307 March 24, 2026 13:01

@zia0307 zia0307 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.

don't merge to main

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.

8 participants