Personal website and blog built with Next.js v15, TailwindCSS v4, and PocketBase.
Home: cod3d.dev
Analytics: analytics.cod3d.dev
├── / # Landing page
├── thoughts/
│ └── [article]/ # Article page
│ └── download/ # Article download endpoint
├── feed.xml # RSS feed
├── sitemap.xml # Sitemap
├── pgp-key.txt # PGP to verify ownership
├── security.txt # See https://securitytxt.org/, signed using pgp-key.txt
├── ads.txt # See https://iabtechlab.com/ads-txt/
└── app-ads.txt # See https://iabtechlab.com/ads-txt/
-
Install dependencies:
bun install
-
Setup environment variables:
# Follow .env.example to create .env file with: SITE_URL=your_site_url SITE_NAME=your_site_name POCKETBASE_HOST=your_pocketbase_host POCKETBASE_USER=your_pocketbase_user POCKETBASE_PASS=your_pocketbase_pass UMAMI_WEBSITE_ID=your_umami_id -
Start development server:
bun dev
├── src/
│ ├── app/ # Next.js application pages and routes
│ │ └── (pages)/
│ │ ├── (components)/ # UI components specific to route
│ │ └── page.tsx/ # UI components for route
│ ├── components/ # Reusable UI components
│ │ ├── effects/ # Reusable effects
│ │ ├── footer/ # Footer and its components
│ │ ├── icons/ # Well, icons
│ │ ├── navigation/ # Navigation drawer
│ │ └── ... # Other reusable UI components
│ ├── lib/ # Utility functions and hooks
│ │ ├── hooks/ # Custom React hooks
│ │ ├── context/ # Custom React contexts
│ │ ├── markdown/ # Markdown processing utilities
│ │ ├── utils/ # General utilites
│ │ └── trustedTypes.ts # Enables trusted types
│ ├── pocketbase/ # PocketBase configuration and client
│ └── styles/ # Global styles and theming
├── public/ # Static assets and PWA files
└── scripts/ # Scripts to generate some fun
-
Framework & Runtime
- Next.js 15 with App Router
- React 19
- Bun as JavaScript runtime and package manager
- TypeScript with strict mode
-
Styling & Design
- TailwindCSS v4
- Geist & Geist Mono, Pixelify Sans fonts
- next-themes for theming
-
Content & Data
- PocketBase for backend
- Unified for Markdown processing
-
Animation & Interaction
- Lenis for smooth scrolling
-
Development Tools
-
Analytics
- Umami for privacy-friendly anallytics. See analytics.cod3d.dev for stats.
bun run dev- Start development serverbun run build- Build production bundle (with telemetry disabled)bun run build:clean- Clean build directory and rebuildbun run start- Start production serverbun run lint- Run Biome linterbun run lint:fix- Fix linting issues with Biomebun run analyze- Analyze bundle sizebun run generate:pokemons- Generate Pokemon databun run commit- Interactive commit with conventional commit standards
- Markdown with frontmatter support, syntax highlighting, KaTeX and more.
- Reading time estimation
- Image theming
- RSS feed, download articles in original format (markdown)
- CSP, CORS, Trusted Types
- Middleware with download token generation
- Pre-commit: Runs Biome to check and format staged files
- Commit-msg: Validates commit messages using commitlint
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes using conventional commits (
bun run commit) - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This projects strives to be REUSE compliant.
Generally:
- Art, documentation and security-related .txt files are licensed under CC-BY-NC-SA-4.0
- Code is licensed under Apache-2.0
- Fonts are used under OFL-1.1
- Config files are under CC0-1.0
Pokémon and Pokémon character names are trademarks of Nintendo.
Copyright 2025 cod3ddot@proton.me
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
