Projektit
Valitut työt
Projektit
Projektini. Työpöytänäkymässä ne näkyvät interaktiivisena aurinkokuntana — tässä luettavana listana.
-
HRM
liveFull-stack-henkilöstöhallintajärjestelmä
Tuotantovalmis HR-järjestelmä portfoliotasoisella toteutuksella. Kaksi tietokantaa (PostgreSQL rakenteelliselle datalle, MongoDB muuttumattomalle, hajautusketjutetulle auditlokille), 38 käyttöoikeutta käyttäjäkohtaisilla poikkeuksilla, TOTP-kaksivaiheinen tunnistautuminen, palvelinpuolen nopeusrajoitus, OpenTelemetry-jäljitys, 18 kieltä ja reaaliaikaiset toimintailmoitukset SSE:llä (polling-varavaihtoehdolla).
- 2906+ testiä
- 92,2 % rivikattavuus
- PostgreSQL + MongoDB
Integraatiot
- Google OAuth
- GitHub OAuth
- Sentry
- OpenTelemetry
- Next.js
- React
- TypeScript
- PostgreSQL
- MongoDB
- Prisma
- MUI
- Jest
- Playwright
- Docker
- GitHub Actions
- Zod
- NextAuth
- next-intl
- ReactFlow
- Pino
- pg-boss
-
Platform
liveYhteisöalusta HRM:n päälle rakennettuna
Tuotantokäytössä oleva yhteisöalusta oikealle WoW-killalle osoitteessa vuohiliitto.com. Turborepo-monorepo jossa HRM git-alimoduulina. Monivuokrainen, WoW-henkinen pelillistäminen (XP, tasot, saavutukset, questit), välilehtipohjainen chatti whispereineen ja slash-komentoineen, Mythic+ -tiimiseuranta Raider.IO API:n kautta ja opastettu tutustumiskierros uusille jäsenille.
- Oikeita käyttäjiä
- Monivuokrainen
- 1388+ testiä
Integraatiot
- Raider.IO API
- Google OAuth
- GitHub OAuth
- GitHub API
- Turborepo
- Next.js
- React
- TypeScript
- PostgreSQL
- Prisma
- NextAuth
- MUI
- Playwright
- Jest
- next-intl
-
Portfolio
wipTämä sivusto
Sivusto jota katsot nyt. Täysin staattinen, rakennettu Astrolla, Three.js:llä ja GSAP:lla. Visuaalinen näyte animaatio-osaamisesta, tarkoituksella eri teknologiapinolla kuin HRM ja Platform.
- Astro
- Three.js
- GSAP
- TypeScript
- Tailwind CSS
-
ReadLog
livePidä kirjaa jokaisesta lukemastasi kirjasta
Henkilökohtainen lukupäiväkirja. Hakee kirjatiedot Google Booksista ja Open Librarysta samanaikaisesti, joten kirjan lisääminen on nopeaa — valitset vain formaatin (paperi, e-kirja tai äänikirja), 0–5 tähden arvion ja milloin luit sen. Etusivulla näkyy mitä muut ovat lukeneet viime aikoina.
- 90 testiä
- Monilähde-haku
Integraatiot
- Open Library
- Google Books
- Google OAuth
- Next.js
- React
- TypeScript
- Prisma
- PostgreSQL
- NextAuth
- MUI
- Jest
-
ReadLog .NET
liveReadLog käännettynä ASP.NET Coreen
Idiomaattinen ASP.NET Core -käännös ReadLogista, käynnissä ilmaiseksi Azure App Servicessä. Sama lukupäiväkirjasovellus — hae Open Librarysta ja Google Booksista, kirjaa kirjat formaatilla, lukupäivämäärällä ja 0–5 tähden arviolla, selaa kirjastoasi ja julkista "viimeksi luettua" -syötettä — toteutettuna uudelleen .NET 8 Razor Pagesilla, EF Core + SQLitellä ja ASP.NET Core Identityllä (paikallinen ja Google-kirjautuminen). Kontitettu ja toimitettu tarkastajan hyväksymällä GitHub Actions -putkella GHCR:ään ja sieltä Azureen OIDC:n yli; EF Core -migraatiot ajetaan ensimmäisellä käynnistyksellä.
- ASP.NET Core 8 -käännös
- Live Azure App Servicessä
- EF Core · SQLite · OIDC-julkaisu
Integraatiot
- Open Library
- Google Books
- Google OAuth
- .NET 8
- ASP.NET Core
- Razor Pages
- EF Core
- SQLite
- ASP.NET Identity
- Bootstrap 5
- xUnit
- Docker
- GitHub Actions
- Azure App Service
-
AudiobookMaker
wipPDF → äänikirja
Työpöytäsovellus joka muuntaa PDF-, EPUB-, Word/DOCX- ja tekstitiedostot äänikirjoiksi; skannatut PDF:t ajetaan ensin Tesseract-OCR:n läpi. Neljä puhesynteesimoottoria: Edge-TTS (pilvi, 30+ ääntä kuudella kielellä), Piper (offline, ei vaadi GPU:ta), Chatterbox "Grandmom"-äänellä äänen kloonaukseen referenssinäytteestä ja VoxCPM2 zero-shot-äänenkloonaukseen ja -suunnitteluun tekstistä (vaatii NVIDIA-näytönohjaimen, vain kehittäjäasennus). Sama Chatterbox-moottori ääninäyttelee Spacepotatiksen pelin sisäisen tarinan. Englannin puhesynteesi toimii jo hyvin; suomi on vaikeampi syntetisoida käytettävissä olevilla resursseilla, joten sitä varten on rakennettu 19-vaiheinen normalisointiputki joka hoitaa numeroiden kontekstitaivutuksen, lyhenteiden purkamisen, yksikkösymbolien käsittelyn ja vierassanojen ääntämiskorjaukset — laatu paranee joka julkaisun myötä. Jaetaan Windows-asennusohjelmana automaattipäivityksillä ja 3000+ testillä.
- Chatterbox-ääniklooni Grandmom-äänellä
- 19-vaiheinen suomen kielen normalisointi, 3000+ testiä
- Antaa äänen Spacepotatiksen tarinalle
Integraatiot
- Microsoft Edge-TTS
- Python
- PyMuPDF
- ebooklib
- ocrmypdf
- Tesseract
- num2words
- edge-tts
- Piper
- Chatterbox
- VoxCPM2
- PyTorch
- CustomTkinter
- pydub
- pygame
- ffmpeg
- PyInstaller
- Inno Setup
- GitHub Actions
-
Spacepotatis
liveSelainampumapeli — perunasi vastaan galaksi
Selainpeli, jossa suojakuplaan suljettu peruna ampuu hyönteisiä proseduraalisessa galaksissa. Käynnistyy kuin vanha terminaali, avautuu 3D-aurinkokunnaksi jota voit pyörittää ja zoomata, ja heittää sinut ylhäältä alas vyöryvään taisteluun Tyrian 2000:n hengessä. Next.js 16 + React 19 -kuori Phaser 4 -taistelukentän ympärillä, Three.js + GSAP galaksinäkymässä ja kamerasiirtymässä taisteluun, PostgreSQL Neonissa Kyselyn (tyypitetty SQL-rakentaja, ei ORM:ää) kautta. Kaikki äänet AudiobookMakerin tuottamia, kaikki musiikki kirjoitettu strudel-patterns-repoon. Mukana kokoelma omia Claude Code -skillejä .claude/skills/-hakemistossa — versionhallittuja, auditoituja, tuotantoartefaktien tavoin käsiteltyjä.
- Next.js 16 + Phaser 4 + Three.js
- ~1300 testiä, CI joka pushissa
- Omat Claude Code -skillit tuotantoartefakteina
Integraatiot
- Google OAuth
- Next.js
- React
- TypeScript
- Phaser 4
- Three.js
- GSAP
- PostgreSQL
- Kysely
- NextAuth
- Tailwind CSS
-
Strudel Patterns
liveAlgoritminen musiikki Strudelilla
Live-koodattua elektronista musiikkia Strudelilla — JavaScript-pohjainen kuviomoottori, TidalCyclesin sukulainen. Jokainen kappale on yksi kompostoitavissa oleva ilmaisu: pinoja syntetisaattoreita, bassolinjoja, rumpukuvioita ja efektiketjuja. Sävelletty rakenteistetulla tekoälytyönkululla — luonnollinen kuvaus → generointi → kuuntelu → iterointi, päätökset kirjattu git-historian rinnalle. Valitut kappaleet säestävät Spacepotatista (galaksinäkymä, missioteemat, tarinan kerrontapohja) ja mikkonumminen.dev-aloitussivua. Uudelleenkäytettävä komponenttikirjasto, kuratoidut syntetisaattoriasetukset, sessiomuistiot iteraatioista.
- Live-koodattu Strudelilla
- Tekoälyohjattu iterointi, kirjattuna gitiin
- Spacepotatiksen ja mikkonumminen.devin ääniraita
- Strudel
- JavaScript
- Web Audio API
- Claude Code
-
claude-continue
wipPidä Claude Code -ikkunat peräkkäin
Alustariippumaton Python-työkalu — CLI ja yhden napin Tkinter-käyttöliittymä — joka pitää Claude Coden 5-tuntiset käyttöikkunat peräkkäin. Se lukee aktiivisen ikkunan nollautumisajan ccusagesta, odottaa vaihtumista ja jatkaa keskeytettyjä istuntoja — broadcast iTerm2:een macOS:llä, tmux-paneeleihin macOS:llä tai Linuxilla, tai headless-ajo Windowsilla/WSL:llä — ja virittyy seuraavaa ikkunaa varten. Toimii valvomatta launchd:n (macOS) tai Windowsin Task Schedulerin kautta. Rakennettu pitkiin autonomisiin agenttiajoihin — ja rehellinen siitä tarkastusvelasta, jota se synnyttää.
- Python · Tkinter-GUI
- macOS · Windows · WSL · Linux (tmux)
- Valvomatta launchd / Task Scheduler
- Python
- Tkinter
- ccusage
- PyInstaller
- launchd
- Task Scheduler
- tmux
- GitHub Actions
-
PasswordManager
wipNollatietomallin salasananhallinta Rustilla
Paikallislähtöinen salasananhallinta, jossa yksi ainoa Rust-kirjasto on ainoa paikka missä salaus tapahtuu — Argon2id-avaimenjohto ja XChaCha20-Poly1305-autentikoitu salaus, käännettynä sekä natiivisti että WebAssemblyksi. Neljä asiakassovellusta jakaa sen: offline-ensin CLI-holvi SQLitellä, synkronointipalvelin joka tallentaa vain salattua dataa, selaimessa toimiva WASM-asiakas ja Chrome-laajennus autofillillä ja tallennuksella kirjautuessa. Merkintäkohtaiset noncet ja AEAD sidottuna merkinnän id:hen ja aikaleimaan estävät tietueiden vaihtamisen; avaimet nollataan käytön jälkeen; pääsalasana ei koskaan poistu asiakkaalta. Jokainen turvallisuuspäätös on kirjattu ADR:ksi eksplisiittistä uhkamallia vasten, ja CI estää salaisuudet pääsemästä repoon samalla kun se ajaa formatoinnin, clippyn, koko työtilan testit ja wasm-käännöksen.
- Yksi salauskirjasto, neljä asiakassovellusta
- Argon2id + XChaCha20-Poly1305
- Palvelin tallentaa vain salattua dataa
Integraatiot
- Google OAuth
- Tailscale Funnel
- Cloudflare Tunnel
- Rust
- WebAssembly
- Tokio
- SQLite
- Argon2id
- XChaCha20-Poly1305
- wasm-bindgen
- Chrome Extension (MV3)
- JavaScript
- GitHub Actions
-
claude-agents
liveKustannusreititetyt subagentit Claude Codelle
Pieni globaali kokoelma Claude Code -subagentteja, joka lopettaa Opus-hintojen maksamisen työstä jonka halvempi malli hoitaa yhtä hyvin. Kaksitoista agenttia, joista jokainen kiinnittää sekä mallitason että päättelyponnistuksen frontmatterissaan: Haiku vain-luku-tiedusteluun (scout, log-miner, scribe, dep-checker, tidy), Sonnet spesifikaatio-ohjattuihin muokkauksiin (mechanic, test-writer, locale-translator, doc-scribe, migrator, bisect) ja kiinnittämätön architect joka perii istunnon mallin suunnittelutyötä varten. Agentit tunnistavat itse kunkin repon teknologiapinon — testiajurin, linterin, i18n-rakenteen — joten yksi kokoelma kattaa JS-, C#- ja Python-projektit. Asentuu Claude Code -pluginina jaetusta markkinapaikasta tai skriptillä. MIT-lisensoitu.
- 12 malliin kiinnitettyä agenttia
- Erottaa mallitason päättelyponnistuksesta
- Plugin- tai skriptiasennus
- Claude Code
- Claude Haiku
- Claude Sonnet
- Claude Opus
- Bash
- Markdown
-
Feedback Intelligence
livePerusteltua palauteanalyysia paikallisella LLM:llä
Palautteen älymoottori joka muuntaa sekavan vapaamuotoisen palautteen tilannekohtaiseksi signaaliksi päästämättä LLM:ää käsiksi lukuihin: deterministinen, sääntökoodattu hälytyskerros laskee jokaisen luvun ja trendin, ja LLM ainoastaan jäsentää syötteen ja syntetisoi teemakertomukset — jokainen väite sidottu takaisin palaute-id:ihin ja pudotetaan varajärjestelmään jos se ei läpäise validointia. Toimialat ovat liitettäviä moduuleja (ensimmäisenä: suomalainen ruoka- ja rautakaupan hybridivähittäiskauppa); konfiguraatioasetus vaihtaa toisen toimialan ilman ydinmuutoksia. .NET 8 paikallisen Poro 2 8B:n päällä Ollamassa — valittu 30 kierroksen sokkotestissä — ja live-demo Azure Static Web Appsissa joka tavoittaa paikallisen GPU:n Tailscale Funnelin kautta ilman pilvipäättelyn kustannuksia. GDPR-puhdas synteettinen korpus, kerroksittainen prompt-injektiosuoja, hermeettinen xUnit-testisarja CI:ssä.
- Deterministiset hälytykset — LLM ei koskaan laske lukuja
- Liitettävät toimialat, ei ydinmuutoksia
- Live-demo Azuressa, päättely paikallisella GPU:lla
Integraatiot
- Tailscale Funnel
- .NET 8
- C#
- SQLite
- Ollama
- Poro 2 8B
- Microsoft.Extensions.AI
- xUnit
- Docker
- Node.js
- Azure Static Web Apps
- Azure Functions
- GitHub Actions
- CodeQL