{"id":50749616,"url":"https://github.com/mikko-lab/luukku-ai","last_synced_at":"2026-06-11T00:02:47.733Z","repository":{"id":353550426,"uuid":"1219881250","full_name":"mikko-lab/luukku-ai","owner":"mikko-lab","description":"Asunnon ostajan riskikartoitus","archived":false,"fork":false,"pushed_at":"2026-05-21T11:03:07.000Z","size":351,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-21T19:33:05.499Z","etag":null,"topics":["ai","anthropic","finland","nextjs","pdf-analysis","prisma","real-estate","typescript"],"latest_commit_sha":null,"homepage":"https://luukku-ai.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mikko-lab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-24T10:08:58.000Z","updated_at":"2026-05-21T11:03:54.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mikko-lab/luukku-ai","commit_stats":null,"previous_names":["mikko-lab/luukku-ai"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mikko-lab/luukku-ai","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikko-lab%2Fluukku-ai","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikko-lab%2Fluukku-ai/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikko-lab%2Fluukku-ai/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikko-lab%2Fluukku-ai/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mikko-lab","download_url":"https://codeload.github.com/mikko-lab/luukku-ai/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mikko-lab%2Fluukku-ai/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34175887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","anthropic","finland","nextjs","pdf-analysis","prisma","real-estate","typescript"],"created_at":"2026-06-11T00:02:47.028Z","updated_at":"2026-06-11T00:02:47.731Z","avatar_url":"https://github.com/mikko-lab.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Luukku AI — Asuntoanalyysi\n\nLataa isännöitsijäntodistus ja/tai tilinpäätös, saat riskianalyysin muutamassa sekunnissa.\n\n## Mitä se tekee\n\n- Lukee PDF:n ja poimii talousluvut, remonttihistorian ja tulevat remontit\n- Luokittelee remontit (putkiremontti, julkisivu, katto...) domain-logiikalla\n- Laskee riskipisteen 0–10 ja antaa selkeän päätöksen: **ÄLÄ OSTA / HARKITSE TARKKAAN / HYVÄ KOHDE**\n- Tukee kahden dokumentin yhdistämistä — isännöitsijäntodistus + tilinpäätös\n- Generoi PDF-raportin välittäjälogolla\n- Kirjautuminen ja analyysikredittijärjestelmä toimistotason käyttöön\n\n## Arkkitehtuuri\n\n```\nPDF upload\n  → pdfExtractor              (pdf-parse, dynamic import)\n  → normalizeText\n  → llmExtractor              (Claude Haiku, 2-pass)\n      Pass 1: talousluvut, koko, sijainti\n      Pass 2: remonttihistoria rakenteistettuna\n      Post: deduplicateCompletedRepairs (saman tyypin kirjaukset → viimeisin vuosi)\n  → mergeService              (jos kaksi dokumenttia, deduplicateRenovations)\n  → validationService         (bounds-tarkistus)\n  → repairClassificationService (major / minor / unknown + REPAIR_WEIGHTS)\n  → confidenceService         (0–1 painotettu kenttäläsnäolo)\n  → scoringService            (buildingRiskModel + REPAIR_IMPACT + talouslogiikka)\n  → db.$transaction           (kredit vähennetään + analysisLog kirjataan)\n  → API response              (verdict, risk_score, monthly_cost, factors, red_flags)\n```\n\n## Teknologia\n\n- **Next.js 15** App Router, TypeScript\n- **Anthropic Claude Haiku** (`claude-haiku-4-5`) — LLM-ekstraktio\n- **pdf-parse** — PDF-tekstin purku\n- **Prisma + SQLite** — käyttäjähallinta ja analyysien kirjaus\n- **bcryptjs + JWT** — autentikaatio, evästepohjaiset sessiot\n- **PM2 + Nginx** — tuotantodeploy Hetzner VPS:llä\n\n## Käynnistys\n\n```bash\ncp .env.example .env.local\n# täydennä muuttujat .env.local-tiedostoon\n\nnpm install\nnpx prisma migrate deploy   # luo SQLite-tietokannan\nnpm run dev\n```\n\nAvaa http://localhost:3000\n\n## Ympäristömuuttujat\n\n| Muuttuja | Kuvaus |\n|---|---|\n| `ANTHROPIC_API_KEY` | Anthropic API-avain |\n| `DATABASE_URL` | Prisma SQLite-polku, esim. `file:/absoluuttinen/polku/prod.db` |\n| `JWT_SECRET` | Vähintään 32-merkkinen satunnainen merkkijono sessiolle |\n| `COOKIE_SECURE` | `true` HTTPS-tuotannossa, `false` HTTP:llä |\n\n\u003e **Huom DATABASE_URL:** käytä absoluuttista polkua — Prisma CLI ja Next.js runtime ratkaisevat suhteelliset polut eri hakemistoista.\n\n## Riskilogiikka\n\nPisteet 0–10, lähtöpiste 5.\n\n**Korottavat tekijät:**\n- Putkiremontti puuttuu, rakennus yli 40v → +3\n- Julkisivu puuttuu, rakennus yli 35v → +2\n- Katto puuttuu, rakennus yli 30v → +1.5\n- Iso remontti tulossa 5v sisällä → +2–2.5\n- Korkea yhtiölaina → +1–2\n\n**Alentavat tekijät:**\n- Putkiremontti tehty → −3\n- Julkisivu tehty → −2\n- Katto tehty → −2\n- (Ennen vuotta 2000 tehdyt remontit eivät laske pisteitä)\n\n**Verdict:**\n- ≥ 8 → ÄLÄ OSTA\n- ≥ 6 → HARKITSE TARKKAAN\n- \u003c 6 → HYVÄ KOHDE\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikko-lab%2Fluukku-ai","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmikko-lab%2Fluukku-ai","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmikko-lab%2Fluukku-ai/lists"}