spectacular
spectacular copied to clipboard
Sweet & Powerful SvelteKit Project Template https://spectacular-console.vercel.app/ https://spectacular-docs.vercel.app/ https://spectacular-web.vercel.app/
Spectacular
Spectacular is a full-stack Turborepo template project with SvelteKit meta-framework all working in harmony and sharing packages.
Tech Stack
- Monorepo: Turborepo
- JS Framework: SvelteKit
- CSS: Tailwind CSS
- UI Components: tailwindcss based Flowbite, SkeletonUI and DaisyUI
- Unit/Component testing: vitest
- Testing Library
- Svelte Testing Library
- API Mocking: Mock Service Worker
- Code Coverage c8
- End-to-End Testing: playwright
- GraphQL: Houdini & Hasura
- Authentication: Auth.js
- PWA: Vite PWA
- Linter/Formatter: Biome
Features
- [x] Responsive Design: Container queries
- [ ] Progressive Web Apps (PWAs):
- [x] Smart caching with Service Works
- [ ] Re-engage customers with Push Notifications
- [x] Push Application Updates
- [ ] Offline app with pglite
- [ ] Fonts and Image Optimization: edge caching, Lazy-loading images
- [x] SEO Ready
- [x] Meta Tags and Json-LD with svelte-meta-tags
- [ ] Dynamic OpenGraph images with sveltekit-og
- [x] Image Optimization with sveltejs/enhanced-img
- [x] GraphQL: Houdini the disappearing GraphQL client for SvelteKit. and nHost as BaaS
- [x] Forms: Form handling with [superforms, source] and Validation with
zod - [ ] Error Handling:
- [x] Strongly Typed Error Handling with generic errors
- [x] FormData preprocessing with zodfd
- [x] Themes: tailwindcss DarkMode switcher
- [x] Deployment: Docker build and deployment serverless / k8s runtimes.
- [x] Tables: svelte-headless-table
- [ ] Security: Use Auth.js when stable
- [ ] Vitebook or Storybook 7
- [ ] GraphQL Yoga API
- [ ] Documentation micro site with Astro
- [ ] Build Tools
- [ ] Use Bob.Build for Smart Builds, Build Cache etc and Bob's github-actions
- [ ] Use earthly.dev - Great for monorepos, Compatible with Every Language, Framework, and Build Tool
- [x] Use sveltekit-og for Open Graph Image Generation
- [x] Internationalization(i18n) with inlang
Paraglide JS Adapter SvelteKit
Experementing
- [ ] Implement Changesets (link) with turborepo
- [ ] TAURI: Use Tauri with Skeleton for multi-platform.
- [ ] Charts with LayerChart
- [ ] tRPC-SvelteKit End-to-end typesafe APIs SvelteKit.
Setup
cd ~/Developer/Work/SPA
git clone https://github.com/xmlking/spectacular.git
cd spectacular && pnpm i
# (optional) playwright is required for end-to-end testing
bunx playwright install
# (optional) add git-commit-hooks
cog install-hook --all
Environment Variables
By default, the dev server (dev command) runs in development mode and the build command run in production
mode.
This means when running turbo build, it will load the env variables from .env.production if there is one:
Use .env.local to override environment variables in .env (secrets like API keys) for local development.
Developing
Once you've cloned the project and installed dependencies with pnpm i, start a development server:
Start local Hasura
# stat all services in background and show logs
make up # for first time use `make boot` then `make up`
# this will start all services with default profile + services with `all` profile.
make up PROFILES=all
# verify status/health of services
make ps
# shotdown all services
make down
# DANGER: run this if you want to reset database and other persistent volumes
make teardown
# verify if docker `compose` getting correctly resolved application config from .env and .secrests files
make check
make check PROFILES=all,optional
# ssch to a container to debug
#make exec-<target>
make exec-hasura
make exec-auth
Start apps/console
turbo dev --filter=console
# or use `--log-order=stream` to disable TUI
turbo dev --filter=console --log-order=stream
# or start the server and open the app in a new browser tab
turbo dev --filter=console -- --open
# run in debug mode
turbo dev:debug --filter=console
# run with a custom inline config
# inline environment variables has higher precedence than ones loaded from .env and .env.local files
PUBLIC_GRAPHQL_ENDPOINT=api.mycompany.com:443 turbo dev
Maintenance
Update
To update the packages to their latest versions in package.json
pnpm up --latest -r
pnpm audit --fix
Format
Format and lint code
turbo format
turbo format --filter=!'console-fb'
turbo lint
Testing
Unit/Component Tests
turbo test
turbo test:ui
#Then, you can visit the Vitest UI at http://localhost:51204/__vitest__/.
# test coverage
turbo test:coverage
# updating Snapshots
bunx vitest -u
# test specific folder
bunx vitest apps/web/src/lib/utils
(or)
./node_modules/.bin/vitest run apps/web/src/lib/utils
E2E Tests
turbo test:e2e
Building
To create a production version of your app:
turbo build
# run build
turbo build --filter=playground...
turbo build --filter=playground... --dry
turbo build --filter=playground... --graph
Run from the local build directory:
NODE_ENV=production \
PUBLIC_GRAPHQL_ENDPOINT=api.mycompany.com:443 \
node build
# (optional) pass ORIGIN when using `adapter-node` build
HOST=127.0.0.1 \
PORT=4000 \
ORIGIN=https://my.site \
node build
You can preview the production build with turbo preview --filter=playground....
To deploy your app, you may need to install an adapter for your target environment.
Release
after checking-in all your changes, bump the VERSION and build the docker image.
# dry-run
cog bump --auto --dry-run
# this will bump version in package.json and create git tag and commit.
cog bump --auto
Libs
To build and publish libs
turbo build --filter=lib...
cd package
pnpm publish