vasilistotskas/grooveshop-storefront-ui-node-nuxt(opens in a new tab)
Language: TypeScript
Nuxt Ecommerce
- stars
- 19
- watchers
- 1
- forks
- 6
- open issues
- 4
- Last updated
- 11/01/2026
Language: TypeScript
Nuxt Ecommerce
A full-featured Nuxt 4 SSR e-commerce storefront built with Vue 3 Composition API, TypeScript, and Tailwind CSS 4. Communicates with a Django REST API backend via a Nitro proxy server.
| Category | Technology |
|---|---|
| Framework | Nuxt 4 (SSR) |
| UI | Vue 3 Composition API, @nuxt/ui v4, Tailwind CSS 4 |
| State | Pinia |
| i18n | @nuxtjs/i18n (el default, en) |
| Auth | django-allauth headless + nuxt-auth-utils |
| Payments | Viva Wallet (primary), Stripe |
| Search | Meilisearch |
| Testing | Vitest + @nuxt/test-utils |
| Package Manager | pnpm — version pinned by packageManager in package.json |
| Runtime | Node.js 24 |
@nuxt/a11y, reduced-motion support, keyboard navigationTenant.available_locales); a prefix the tenant does not
list is 404'd by the locale-availability middleware├── app/ # Client-side (Nuxt 4 convention)
│ ├── pages/ # File-based routing
│ ├── components/ # Vue components
│ ├── composables/ # Vue composables
│ ├── stores/ # Pinia stores (auth, cart, user, notifications, app)
│ ├── plugins/ # Nuxt plugins (auth, setup, websocket)
│ ├── middleware/ # Route middleware (auth, guest, transitions, loyalty)
│ ├── layouts/ # Layouts (default, user, auth)
│ ├── utils/ # Client utilities
│ ├── providers/ # Custom image providers
│ └── assets/ # CSS, images, Lottie animations
├── server/ # Nitro server
│ ├── api/ # API proxy routes to Django backend
│ ├── middleware/ # Locale detection, logging, redirects
│ ├── plugins/ # HTTP agent pooling, cache storage
│ ├── routes/ # OAuth callbacks, RSS feed, sitemap
│ └── utils/ # Auth, parsing, error handling, cart session
├── shared/ # Auto-imported in app + server
│ ├── types/ # Hand-written TypeScript types
│ ├── schemas/ # Zod validation schemas
│ ├── openapi/ # Auto-generated types from Django schema
│ ├── constants/ # Shared constants
│ └── utils/ # Shared utilities
├── modules/ # Custom Nuxt modules (cookies, purge-comments)
├── runtime/ # Cookie control module runtime
├── i18n/ # Locale config and translation files
├── test/ # Vitest tests (unit, nuxt, e2e)
├── docker/ # Dockerfile (multi-stage, Node 24 Alpine)
└── openapi/ # OpenAPI schema files
corepack enable — the exact version is pinned by
packageManager in package.json# Install dependencies pnpm install # Copy environment file cp .env.example .env # Edit .env with your configuration # Prepare Nuxt types pnpm prepare # Start dev server pnpm dev
| Command | Description |
|---|---|
pnpm dev |
Start development server |
pnpm build |
Build for production |
pnpm start |
Start production server |
pnpm lint |
Lint with auto-fix |
pnpm lint:ci |
Lint without fixing (what CI runs) |
pnpm typecheck |
nuxt typecheck — the required gate, stricter than vue-tsc |
pnpm test |
Run all tests |
pnpm test:ci |
Run unit + nuxt tests with coverage |
pnpm openapi-ts |
Generate types from the Django OpenAPI schema |
pnpm sync:schema |
Required after openapi-ts — rewrites the derived .yml files |
pnpm prepare |
Prepare Nuxt types |
Regenerating types is a two-step:
pnpm openapi-ts && pnpm sync:schema. The.ymlfiles underopenapi/are derived, not hand-edited; skipping the second step leaves them stale and the drift surfaces later as unexplained 422s from Django. Always regenerate against a LOCAL backend, never production.
# Build docker build -f docker/Dockerfile . # Or use Docker Compose docker compose up
The Nuxt server acts as a proxy between the Vue frontend and the Django REST API. Client-side code calls /api/... routes on the Nuxt server, which forwards requests to Django with appropriate auth headers, caching, and Zod validation.
Browser → Nuxt SSR / Client → Nitro Server (/api/*) → Django REST API
↕
Redis Cache
$fetch to Django → parseDataAs response → handleErrornuxt-auth-utils, OAuth tokens stored in encrypted server sessionGitHub Actions pipeline: quality (TypeScript check) → test (unit + nuxt with coverage) → build (with Redis service) → release (semantic-release on main).
Docker images published to Docker Hub and GHCR on release.
This project is open-sourced under the MIT License. See the LICENSE file for more details.