Projects
What I've built
Pokemon Team Builder
Angular application for building competitive Pokémon teams, with live stat calculation, type-coverage analysis and a full Pokédex.
- Angular 21
- TypeScript
- Signals
- Tailwind CSS 4
- PrimeNG
Pokemon Team Builder · API
REST API in Java 21 and Spring Boot 4 with JWT authentication, persisted refresh tokens, per-IP rate limiting and PokéAPI synchronisation.
- Java 21
- Spring Boot 4
- Spring Security
- JWT
- PostgreSQL 17
- Docker
Necobot
Discord bot in TypeScript with a points economy, minigames and in-character replies generated by a locally hosted language model.
- SQLite
- Ollama
- Docker
- Drizzle
- Sapphire
- TypeScript
- Discord API
- GitHub Actions
Homelab
Linux server at home that hosts my projects with Docker Compose, exposed to the internet through Cloudflare Tunnel without opening ports.
- Linux
- Docker Compose
- Cloudflare Tunnel
- PostgreSQL
- Ollama
This Portfolio
The site you're looking at: Angular 21 without zone.js, prerendered at build time, with light and dark themes and internationalisation, served as static files from Cloudflare.
- Angular 21
- Tailwind CSS 4
- Prerender
- i18n
- Cloudflare