Files
modrinth/apps/frontend/AGENTS.md
T
Calum H. e8aee15664 chore: cleanup standards (#6970)
* chore: cleanup standards & skills

* remove: figma mcp doc, not needed anymore
2026-08-10 15:15:44 +00:00

2.3 KiB

apps/frontend — Modrinth Website

Nuxt 3 application serving the main Modrinth website. Uses Vue 3, Tailwind CSS v3, and file-based routing.

Architecture

Nuxt 3 with SSR — pages are server-rendered and hydrated on the client. Uses $fetch for server-side data fetching and @modrinth/api-client (via NuxtModrinthClient) for client-side API calls.

Key Directories

  • src/pages/ — file-based routing ([param].vue for dynamic segments, nested folders for nested routes)
  • src/components/ — website-specific components (not shared with the app)
  • src/composables/ — Vue composables, including queries/ for TanStack Query options
  • src/providers/ — page-level DI context providers (e.g., version modal, project page)
  • src/plugins/ — Nuxt plugins (TanStack Query setup, theme, etc.)
  • src/middleware/ — route guards and auth checks
  • src/layouts/ — Nuxt layout components
  • src/server/ — server-side plugins, routes, and utilities
  • src/store/ — Pinia state management
  • src/helpers/ — utility functions
  • src/locales/ — i18n translation files

Components

Website-specific components go in src/components/. These are components that only make sense in the website context — admin panels, moderation tools, dashboard widgets, brand components, etc.

Shared components go in packages/ui. If a component could be used by both the website and the desktop app, it belongs in packages/ui/src/components/. See packages/ui/AGENTS.md for UI standards, color rules, and component patterns.

Rule of thumb: if it doesn't depend on Nuxt-specific APIs or website-only features, it should be in packages/ui.

Data Fetching

Use @modrinth/api-client via injectModrinthClient() for all API calls. See packages/api-client/AGENTS.md for the full API client documentation.

For caching and server state, use TanStack Query (@tanstack/vue-query). See the tanstack-query skill (.agents/skills/tanstack-query/SKILL.md) for patterns and conventions used in this codebase.

Deprecated Composables

These composables are deprecated and should not be used in new code:

  • useAsyncData - we use tanstack, not nuxt's built in async data utility.
  • useBaseFetch (src/composables/fetch.js) — legacy Labrinth fetch wrapper. Use client.labrinth.* modules instead.