[{"data":1,"prerenderedAt":378},["ShallowReactive",2],{"work-index-en":3,"work-page-en":351},[4,54,164,208],{"id":5,"title":6,"bars":7,"blurb":8,"body":9,"color":26,"contacts":27,"date":27,"dateModified":27,"description":28,"extension":29,"featured":30,"groups":27,"kicker":31,"meta":32,"metrics":33,"n":27,"navigation":43,"openTabs":27,"path":44,"progress":27,"readTime":27,"reading":27,"role":45,"rules":27,"running":27,"seo":46,"ships":27,"slug":47,"stack":27,"started":27,"status":27,"stem":48,"streak":27,"tag":49,"tagColor":27,"tagline":51,"tasks":27,"timeline":27,"topics":27,"week":27,"year":52,"__hash__":53},"en\u002Fwork\u002Fcooking.md","…something new",1,"a note-taking tool for operators of small internet companies. still an idea. writing not yet on sale.",{"type":10,"value":11,"toc":21},"minimark",[12,15,18],[13,14,8],"p",{},[13,16,17],{},"just me, for now. ~10% built, 0% public, 0 investors (thx). if you run a small internet company and keep losing track of the ten things that matter next week, drop me a line on \u002Fsignal and i'll add you to the very short beta list.",[13,19,20],{},"● draft · quiet mode",{"title":22,"searchDepth":23,"depth":24,"links":25},"",2,3,[],"var(--fg-3)",null,"a quiet, still-cooking note-taking tool for operators of small internet companies. not on sale yet.","md",false,"▸ CH.04 \u002F cooking · quiet mode",{},[34,37,40],[35,36],"progress","~10%",[38,39],"public","no",[41,42],"investors","none, thx",true,"\u002Fwork\u002Fcooking","just me, for now",{"title":6,"description":28},"cooking","work\u002Fcooking",{"label":50,"color":26},"draft","quiet mode","2026 → ?","bE9tXsi6v8EiZpv4DLJM4nsVQkFd40kxlYXcZpbLlSM",{"id":55,"title":56,"bars":24,"blurb":57,"body":58,"color":142,"contacts":27,"date":27,"dateModified":27,"description":143,"extension":29,"featured":30,"groups":27,"kicker":144,"meta":145,"metrics":146,"n":27,"navigation":43,"openTabs":27,"path":155,"progress":27,"readTime":27,"reading":27,"role":156,"rules":27,"running":27,"seo":157,"ships":27,"slug":56,"stack":27,"started":27,"status":27,"stem":158,"streak":27,"tag":159,"tagColor":27,"tagline":161,"tasks":27,"timeline":27,"topics":27,"week":27,"year":162,"__hash__":163},"en\u002Fwork\u002Fagent-monorepo.md","agent-monorepo","a boilerplate for teams who let agents write most of the code. contracts first, humans second, agents third.",{"type":10,"value":59,"toc":137},[60,65,68,72,75,79,82,121,124,134],[61,62,64],"h2",{"id":63},"the-goal","the goal",[13,66,67],{},"make it cheap and safe to let an ai agent write most of the code in a real product — backend, web, mobile — without the parts silently drifting apart.",[61,69,71],{"id":70},"the-problem","the problem",[13,73,74],{},"agents are fast but local. they happily add a field to a nest controller and forget the nuxt call site, or rename a flutter model and leave the server schema behind. in a normal monorepo nothing stops them — types live separately per runtime, and the first real feedback is a 500 in production.",[61,76,78],{"id":77},"how-it-solves-it","how it solves it",[13,80,81],{},"one contract, three runtimes.",[83,84,85,93,99,113],"ul",{},[86,87,88,92],"li",{},[89,90,91],"strong",{},"openapi + asyncapi"," as the single source of truth for requests, events and domain models.",[86,94,95,98],{},[89,96,97],{},"codegen"," into typed clients and server stubs for nest (typescript), nuxt (typescript) and flutter (dart) — so a change in the spec breaks compile everywhere it matters, before the agent can ship it.",[86,100,101,104,105,108,109,112],{},[89,102,103],{},"prisma 7"," for the data layer, ",[89,106,107],{},"better auth"," for sessions, ",[89,110,111],{},"turbo + pnpm"," for the plumbing.",[86,114,115,116,120],{},"repo layout and readme written ",[117,118,119],"em",{},"for agents",": small, labelled surfaces, clear \"do\u002Fdon't\" boundaries, scripts agents can actually run.",[13,122,123],{},"the boilerplate itself is tiny on purpose. the idea isn't \"use this framework\" — it's \"clone this, delete what you don't need, keep the contract-first habit\".",[13,125,126,127],{},"source → ",[128,129,133],"a",{"href":130,"rel":131},"https:\u002F\u002Fgithub.com\u002Fevgentus-cy\u002Fclaude-driven-nest-nuxt-flutter-monorepo",[132],"nofollow","github.com\u002Fevgentus-cy\u002Fclaude-driven-nest-nuxt-flutter-monorepo",[13,135,136],{},"● oss · tooling · mit",{"title":22,"searchDepth":23,"depth":24,"links":138},[139,140,141],{"id":63,"depth":23,"text":64},{"id":70,"depth":23,"text":71},{"id":77,"depth":23,"text":78},"var(--green)","agent-monorepo — a spec-first, agent-friendly boilerplate stitching nestjs, nuxt and flutter around a shared openapi + asyncapi contract.","▸ CH.04 \u002F agent-monorepo · oss tooling",{},[147,150,152],[148,149],"runtimes","nest · nuxt · flutter",[151,91],"contracts",[153,154],"license","mit","\u002Fwork\u002Fagent-monorepo","author · maintainer",{"title":56,"description":143},"work\u002Fagent-monorepo",{"label":160,"color":142},"oss · tooling","spec-first monorepo for ai-coded teams","2025 → now","0Cg2Thk0QBI3xu9szEBSizdus-KjIu1Qz3S6OZuHVGI",{"id":165,"title":166,"bars":167,"blurb":168,"body":169,"color":184,"contacts":27,"date":27,"dateModified":27,"description":185,"extension":29,"featured":30,"groups":27,"kicker":186,"meta":187,"metrics":188,"n":27,"navigation":43,"openTabs":27,"path":198,"progress":27,"readTime":27,"reading":27,"role":199,"rules":27,"running":27,"seo":200,"ships":27,"slug":201,"stack":27,"started":27,"status":27,"stem":202,"streak":27,"tag":203,"tagColor":27,"tagline":205,"tasks":27,"timeline":27,"topics":27,"week":27,"year":206,"__hash__":207},"en\u002Fwork\u002Fkind.md","kind.events",5,"a calm map of what's happening this weekend. curated, no paid placements, no noise.",{"type":10,"value":170,"toc":182},[171,173,176,179],[13,172,168],{},[13,174,175],{},"built with a friend in 2024 and growing slow on purpose. 320 events a month, three cities, a waitlist of 2.4k people who want their town added.",[13,177,178],{},"currently shipping v2 — calendar view, email digests, and a cleaner map.",[13,180,181],{},"● consumer · events discovery · cyprus",{"title":22,"searchDepth":23,"depth":24,"links":183},[],"var(--amber)","kind.events — a calm, curated map of what's happening this weekend across three cyprus cities. no paid placements, no noise.","▸ CH.04 \u002F kind · recently launched",{},[189,192,195],[190,191],"events","320\u002Fmo",[193,194],"cities","3",[196,197],"waitlist","2.4k","\u002Fwork\u002Fkind","solo + 1 friend",{"title":166,"description":185},"kind","work\u002Fkind",{"label":204,"color":184},"consumer","events discovery · cyprus","2024 → now","A6qnwGYYkos0WhuI840Qku-rgOeWXifZbT8F0OQyXc8",{"id":209,"title":210,"bars":211,"blurb":212,"body":213,"color":327,"contacts":27,"date":27,"dateModified":27,"description":328,"extension":29,"featured":43,"groups":27,"kicker":329,"meta":330,"metrics":331,"n":27,"navigation":43,"openTabs":27,"path":341,"progress":27,"readTime":27,"reading":27,"role":342,"rules":27,"running":27,"seo":343,"ships":27,"slug":344,"stack":27,"started":27,"status":27,"stem":345,"streak":27,"tag":346,"tagColor":27,"tagline":348,"tasks":27,"timeline":27,"topics":27,"week":27,"year":349,"__hash__":350},"en\u002Fwork\u002Fmatchpro.md","matchpro.io",4,"a niche job-board that actually matches people, not keywords. rebuilt the matching engine this spring.",{"type":10,"value":214,"toc":321},[215,218,226,229,232,242,245,249,276,278,282,308,318],[13,216,217],{},"¶ case study — 01 · shipped spring '26 · timeline: 11 weeks · team: 1\ntags: matching · search · postgres",[61,219,221,222,225],{"id":220},"the-old-engine-matched-keywords-the-new-one-reads-the-whole-résumé","the old engine matched ",[117,223,224],{},"keywords",". the new one reads the whole résumé.",[13,227,228],{},"by evgeniy · apr 18, 2026 · ~8 min read",[13,230,231],{},"for three years matchpro matched candidates to jobs the lazy way — a tf-idf over titles, with a sprinkle of rules. it was fine. not great. recruiters kept emailing me screenshots of obvious matches it missed. so this spring i sat down and rebuilt the whole thing.",[233,234,235],"blockquote",{},[13,236,237,238,241],{},"\"matching is not search. search rewards precision. matching rewards being ",[117,239,240],{},"interestingly close",".\"",[243,244],"hr",{},[61,246,248],{"id":247},"how-it-went-down","how it went down",[250,251,252,258,264,270],"ol",{},[86,253,254,257],{},[89,255,256],{},"throw away the ranker"," — kept the data, dropped the model. started from a blank ipynb.",[86,259,260,263],{},[89,261,262],{},"embed everything"," — résumé + job text → small multilingual model, cached in pg_vector.",[86,265,266,269],{},[89,267,268],{},"re-rank with signals"," — location, seniority, years-in-stack. boring features still win.",[86,271,272,275],{},[89,273,274],{},"shadow-run for 3 weeks"," — a\u002Fb on recruiters' clicks. watched dashboards more than family.",[243,277],{},[61,279,281],{"id":280},"results-11-weeks-later","results — 11 weeks later",[83,283,284,290,296,302],{},[86,285,286,289],{},[89,287,288],{},"match-quality (recruiter 👍)"," — 41% → 78% (+37 pp)",[86,291,292,295],{},[89,293,294],{},"time-to-first-click"," — 9.2s → 3.1s (−6.1s)",[86,297,298,301],{},[89,299,300],{},"weekly placements"," — 12 → 28 (×2.3)",[86,303,304,307],{},[89,305,306],{},"latency (p95)"," — 640ms → 180ms (−72%)",[309,310,315],"pre",{"className":311,"code":313,"language":314},[312],"language-text","› bench --cohort=q1-recruiters\n  running 2,140 matches…\n  ✓ v3 beats v2 on 78% of pairs\n  ! 4 regressions — investigating\n› deploy prod\n","text",[316,317,313],"code",{"__ignoreMap":22},[13,319,320],{},"● published · 41kb · 2 figures · 6 footnotes",{"title":22,"searchDepth":23,"depth":24,"links":322},[323,325,326],{"id":220,"depth":23,"text":324},"the old engine matched keywords. the new one reads the whole résumé.",{"id":247,"depth":23,"text":248},{"id":280,"depth":23,"text":281},"var(--red)","matchpro.io — a niche cyprus job-board that matches people, not keywords. rebuilt the matching engine in spring '26.","▸ CH.04 \u002F matchpro · currently shipping v3",{},[332,335,338],[333,334],"jobs","1.2k\u002Fmo",[336,337],"placements","~180",[339,340],"revenue","profitable","\u002Fwork\u002Fmatchpro","solo · design + code + ops",{"title":210,"description":328},"matchpro","work\u002Fmatchpro",{"label":347,"color":327},"featured","job-board · it · cyprus","2021 → now","W3ME2VGgLsDw_xeEtEdOafRhHRaJK22QoMt28U1AVBc",{"id":352,"title":353,"bars":27,"blurb":27,"body":354,"color":27,"contacts":27,"date":27,"dateModified":27,"description":367,"extension":29,"featured":30,"groups":27,"kicker":368,"meta":369,"metrics":27,"n":27,"navigation":43,"openTabs":27,"path":370,"progress":27,"readTime":27,"reading":27,"role":27,"rules":27,"running":27,"seo":371,"ships":27,"slug":27,"stack":27,"started":27,"status":372,"stem":376,"streak":27,"tag":27,"tagColor":27,"tagline":27,"tasks":27,"timeline":27,"topics":27,"week":27,"year":27,"__hash__":377},"en\u002Fpages\u002Fwork.md","work",{"type":10,"value":355,"toc":365},[356,359,362],[13,357,358],{},"click a channel — i'll tune you in.",[13,360,361],{},"i ship slowly and on purpose. each product here is live, maintained, and pays its own rent.",[13,363,364],{},"▸ tap a card to tune in",{"title":22,"searchDepth":23,"depth":24,"links":366},[],"four channels, three on air. a small group of live products — matchpro.io, kind.events, agent-monorepo, and something new cooking.","▸ CH.04 — FOUR CHANNELS, THREE ON AIR",{},"\u002Fpages\u002Fwork",{"title":353,"description":367},[373,374,375],"CHANNELS·4","ON AIR·3","DRAFT·1","pages\u002Fwork","xquIfelG16Hga441hggbzQtCh_E89BnE-pfdVbIZy6w",1777071042443]