Siirry sisältöön

Projektit

Valitut työt

Projektit

Projektini. Työpöytänäkymässä ne näkyvät interaktiivisena aurinkokuntana — tässä luettavana listana.

  • HRM

    live

    Full-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

    live

    Yhteisö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

    wip

    Tä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

    live

    Pidä 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

    live

    ReadLog 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

    wip

    PDF → ää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

    live

    Selainampumapeli — 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

    live

    Algoritminen 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

    wip

    Pidä 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

    wip

    Nollatietomallin 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

    live

    Kustannusreititetyt 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

    live

    Perusteltua 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