A unified, high-performance engineering registry that showcases your GitHub projects with a "Mechanical Artisan" aesthetic. Built with SvelteKit 5, Tailwind CSS v4, shadcn-svelte, and GitHub GraphQL.
- 🎨 Mechanical Artisan Design: Slate + Indigo theme with structural sincerity, kinetic weight, and glassmorphism.
- 🚀 Hero Mission Control: Prominently showcases your latest or most critical project with a dedicated "Latest Deployment" hero section.
- 📊 Hybrid Data Layer: Merges live GitHub GraphQL stats (stars, topics) with curated metadata from local config.
- 🏠 Adaptive Grid: A responsive layout that combines a featured hero view with a data-dense masonry-style grid for other modules.
- 🔍 Tech X-Ray: Components revealing detailed repository stats and tech stack.
- ⚡ Instant Feedback: ISR caching with 60-minute TTL for optimal performance.
- 🎯 Project Clustering: Group related repositories (e.g., the Cinder Ecosystem) into virtual entities.
- Bun (
bun) - A GitHub Personal Access Token (for public repos)
- Clone and install dependencies:
cd shipyard
bun install- Configure environment:
cp .env.example .env
# Edit .env with your GitHub token- Populate the registry:
Edit src/lib/server/registry-config.ts to define your project groups and overrides.
Example Configuration:
export const registryConfig = {
groups: [
{
id: 'cinder',
name: 'Cinder Ecosystem',
repos: ['cinder', 'cinder-sv', 'cinder-mcp'],
featured: true
}
],
overrides: {
'tif': {
name: 'Tech Invoice Forge',
featured: true
}
}
};This config groups multiple Cinder repos into one ecosystem and promotes "Tech Invoice Forge" to a featured status.
- Run development server:
bun run devOpen http://localhost:5173 to see your registry.
src/
├── lib/
│ ├── components/ # UI components (shadcn-svelte + Bits UI)
│ ├── server/ # GitHub API & registry logic
│ │ ├── github.ts # GraphQL query + fetcher
│ │ ├── registry.ts # Data aggregation logic
│ │ └── registry-config.ts # Project configuration
│ ├── types.ts # TypeScript types
│ └── utils.ts # Utility functions (cn, etc.)
├── routes/
│ ├── +layout.svelte # Layout wrapper
│ ├── +page.svelte # Main registry grid (Hero + Grid)
│ ├── +page.server.ts # Data loader
│ └── layout.css # Design system variables
shipyard/ # Project specification files
├── index.md
├── engineering.md # Data layer & architecture
├── design-system.md # Visual language & theming
├── implementation.md # Setup guide
└── todos.md # Roadmap
The system fetches live stats from GitHub GraphQL and merges them with curated metadata:
- Source: GitHub GraphQL (stars, updated_at, languages, topics)
- Controller:
registry-config.ts(project grouping, overrides, featured status) - Output: Unified
DisplayProject[]for rendering
Uses Tailwind CSS v4 with a custom Slate + Indigo palette:
- Primary: Indigo 500 (#7c3aed)
- Background: Slate 950 (#0f172a)
- Card: Glassmorphism with
bg-card/30 backdrop-blur-sm - Typography: Inter + Space Mono (or system equivalents)
All UI primitives from shadcn-svelte (Bits UI):
- Card, Badge, Button, Separator: Standard Shadcn components
- ProjectCard: Custom wrapper showing project stats with hover details.
- Hero Section: Dedicated high-impact view for the first project in the list.
# .env
GITHUB_TOKEN=github_pat_xxxxx # Your GitHub Personal Access TokenFor public-only repositories, this token just ensures higher API rate limits.
# Type check & build
bun run build
# Preview production build
bun run previewDeploy to Vercel, Netlify, or any Node.js-compatible host for ISR support.
See shipyard/todos.md for planned enhancements.
- Engineering Specification
- Design System
- Implementation Guide
- SvelteKit Documentation
- Tailwind CSS v4
- shadcn-svelte
MIT