Marami akong nakakatrabahong vibe coder, at napaisip ako dahil doon tungkol sa maintenance. Kailangang alagaan ang software pagkatapos mo itong i-ship, naluluma ang packages at may natutuklasang mga vulnerability, at kapag bago ka pa lang sa pagbuo gamit ang AI, madaling hindi maisip ang lahat ng ito.
Tapos na-realize ko na dapat kong gamitin ang parehong pag-iisip sa sarili kong mga proyekto, kaya binalikan ko ang git history nila. Marami akong nakita, bagaman hindi ang inaasahan ko, at ang isa sa mga iyon ay bukas pa noong araw na tumingin ako.
Kaya hindi na ito post tungkol sa kung ano ang nakakalimutan ng ibang tao. Tungkol ito sa akin.
Isang advisory, tatlong app
Noong Oktubre 14, naglabas ang Next.js ng mga fix para sa dalawang critical na vulnerability at isang high-severity. Ang ibig sabihin ng "critical" dito ay remote code execution, ibig sabihin, sa ilang kondisyon, puwedeng patakbuhin ng isang estranghero sa internet ang sarili niyang code sa server mo nang hindi nagla-log in. Dumating ang fix sa version 16.4.1.
May tatlo akong app sa Next.js, lahat binuo gamit ang AI coding tools at iisa ang responsable sa lahat, ako iyon. Ito ang nangyari:
| App | Kailan lumipat ang code nito sa patched na version | Tagal mula sa advisory | Live sa production |
|---|---|---|---|
| chandlernguyen.com | Oktubre 18 | 4 na araw | Oktubre 18 |
| DIALØGUE | Oktubre 29 | 15 araw | Oktubre 29 |
| Prova | Nobyembre 3 | 20 araw | Nobyembre 3 |
Nang tumingin ako noong Nobyembre 3, naka-lock pa rin ang Prova sa Next.js 16.2.6, ang version na gamit nito mula pa noong Mayo, at iyon ang tumatakbo sa production. Nang patakbuhin ang pnpm audit --prod, lumabas ang 5 critical advisory, lahat sa Next.js.
Mas masama pakinggan ang numerong iyon kaysa sa nakita ko, kaya gusto kong maging patas. Nang isa-isahin ko ang mga ito kasama ang AI tools ko, karamihan sa mga critical ay hindi naaangkop sa Prova. Wala itong use cache functions, hindi ito tumatakbo sa Windows, at wala akong nakitang input na kontrolado ng attacker na umaabot sa next/og code. Malamang hindi rin naaangkop sa Vercel ang mga tungkol sa image optimization, pero hinuha ko lang iyon mula sa kilos ng platform, dahil wala akong nakitang pahayag mula sa Vercel na nagsasabi nito. Ang malinaw na naaangkop ay isang high-severity na denial of service issue sa Server Actions, ibig sabihin puwedeng maabala ng isang tao ang app, at nanatili itong live hanggang sa patch.
Inilipat ko ang production sa Next.js 16.4.5 sa araw ding iyon. Mula 5 critical naging 0 ang audit, at nawala rin ang karamihan sa mga high-severity. Nasa labas ng Next.js ang natitira at kailangan ko pa itong ayusin, kaya mas maayos na ito pero hindi pa malinis.
Hindi ko matatawag na mahusay na maintenance ang alinman dito. Hindi tinamaan ng pinakamasasamang advisory ang Prova higit sa lahat dahil sa kung paano ito nagkataong nabuo, hindi dahil may tumingin. Suwerte iyon, at alam ko lang dahil sa wakas ay tumingin ako.
Hindi rin ako puwedeng umangkin ng malaking kredito sa unang row. General toolchain upgrade ang commit ng site ko noong Oktubre 18, mula sa Next.js 16.1.6, at hindi binabanggit ng message nito ang advisory. Baka nagkataon lang na maganda ang timing.
Bakit hindi nakatulong ang pagiging busy
Ang madaling paliwanag ay napabayaan ang Prova, at may katotohanan doon. May 41 araw na pagitan ng mga commit nito noong Agosto at Setyembre.
Pero gumuguho ang paliwanag na iyon pagdating ng Oktubre. May 175 commit ang Prova noong buwang iyon. Nag-ship ako ng mga fix para sa iOS, billing, email at translations, at hindi gumalaw ang version ng Next.js. Noong Oktubre 30, sumulat pa ako ng dependency maintenance plan para dito. Ang status line nito: "planned; hindi pa nasisimulan ang implementation."
Kaya hindi maintenance ang pagiging aktibo sa repo, at sa tingin ko ito ang pinakamahalagang bahagi para sa sinumang bumubuo gamit ang AI. Kapag gumawa ka ng feature, nakakakuha ka agad ng feedback. Nakikita mo ang button, kini-click mo ito at pinapanood mong gumana. Kapag may in-announce na vulnerability sa package na in-install mo limang buwan na ang nakalipas, wala kang natatanggap. Patuloy na nagse-serve ng pages ang app, nananatiling green ang tests at pumapasa ang build. Walang sira, at iyon mismo ang dahilan kung bakit walang tumitingin.
Para itong smoke alarm na tutunog lang kung lalapitan mo at tatanungin. Pinapamura nang husto ng AI tools ang pagtatayo ng bahay. Hindi nila ikinakabit ang alarm.
Nangyari na rin ito sa akin dati. Walang commit ang DIALØGUE mula Oktubre 6, 2025 hanggang Enero 11, 2026. Naging publiko noong unang bahagi ng Disyembre ang React2Shell, isang critical na vulnerability sa Next.js at React. Enero 11 ang petsa ng patch commit ko, mahigit limang linggo ang lumipas, at Enero 18 ang pinakalumang production deployment record na nakikita ko pa, kaya hindi ko masasabi kung ano talaga ang tumatakbo noong Disyembre. Ang malamang na pinakanakatulong sa akin ay walang kinalaman sa akin: sabi ng Vercel, nag-roll out ito ng firewall rules para sa lahat ng customer nito, habang malinaw ding sinasabing huwag umasa sa mga iyon sa halip na mag-patch.
Gusto kong linawin ang isang bagay, dahil puwedeng tunog insulto ang salitang "vibe coder". Natuto akong mag-code sa mga structured course, kasama ang isang cybersecurity certificate, may tests at review gates ang mga repo na ito, at nangyari pa rin ito. Kaya sa tingin ko hindi ito problema ng baguhan. Sa tingin ko ito ang nangyayari bilang default kapag naging mura ang paggawa ng software at walang nakatalagang magbantay dito.
Ano ang itsura ng alarm
Ang magandang balita, malaki ang nababago ng isang napakaliit na check.
Noong Oktubre 27, idinagdag ko ang pnpm audit --prod sa CI ng site ko, na siyang automatic na hanay ng mga check na tumatakbo kapag may na-push na code. Noong Oktubre 28, nag-fail ito dahil sa advisory sa isang email rendering library na hinihila ng site ko pero hindi kailanman ginamit, at noong Oktubre 29, inalis ko ang library na iyon. Dalawang araw ang inabot at wala akong kailangang tandaan.
Walang matalino sa lahat ng iyon. May isang tao, o isang bagay, na kailangan lang utusang tumingin.
Hindi ako maililigtas ng pag-update ng packages
Kung dito nagtapos ang post na ito, bibigyan ka nito ng maling kapanatagan, dahil walang kinalaman sa lumang packages ang ilan sa mga mas nakakaasiwang fix na ginawa ko noong Oktubre. Mga pagkakamali iyon sa sarili kong produkto.
Sa DIALØGUE, halimbawa:
- Puwedeng tawagin ang mga privileged database function gamit lang ang public key, at naaabot ng naka-log in na user ang mga function na para lang sa backend ko.
- Puwedeng mabuhay muli ang isang na-refund na podcast at matapos nang hindi muling nasisingil, at nangyari iyon sa maliit na bilang ng mga podcast.
Sa Prova, nagmana ang mga public database role ng mga permission na walang pumili, tulad ng TRUNCATE, dahil galing ang mga ito sa default ng platform. Walang app path na gumamit sa mga ito, pero nandoon sila.
Walang version upgrade na makakaayos sa alinman dito. Tumatakbo ang mga app na ito nang may ganitong mga problema, at wala ring nasira roon. Lumabas lang ang mga ito dahil may security review na naghanap sa kanila, at may mga naunang security review na akong ginawa sa mga produktong ito na hindi nakahuli sa lahat.
Naabuso ba ang alinman dito? Hindi ko alam, at hindi ko ito lubos na malalaman. Mga 90 araw lang ang inaabot pabalik ng database logs ko, at mas luma pa roon ang ilan sa mga problemang ito. Sa panahong nakikita ko, wala akong nakitang tawag mula sa labas sa mga function na iyon. Limitadong window lang ang saklaw niyon at hindi nito ipinapakitang walang nangyari. Hindi ko rin masabi kung sino o ano ang nag-restart sa mga na-refund na podcast, bagaman retry sa sarili kong code ang pinakamalapit kong hula.
Hindi rin ito kumpletong listahan. May iba pa akong inaayos na mga isyu, at hindi ko ilalarawan ang mga iyon habang bukas pa.
Hindi pala iyon ang tanong tungkol sa model
Inasahan kong isusulat ko na mas malaki ang gastos sa mga lumang AI model. Hindi ko ito mapatutunayan. Tiningnan ko, at wala akong before-and-after na gastos sa alinman sa mga repo na ito, kaya hula lang iyon.
Mas kakaiba ang nakita ko. Nakatakda sa gemini-3.5-flash ang script-draft at review models ng DIALØGUE hanggang Oktubre 12. Sinasabi na ngayon ng dokumentasyon ng Google na hindi isasara ang endpoint na iyon at awtomatiko nitong nire-route ang mga request sa gemini-3.6-flash. Hindi ko alam kung kailan nagsimula ang routing na iyon, kaya hindi ko masasabi kung aling model ang sumasagot at gaano katagal. Hindi napi-freeze ng pangalan ng model sa config mo ang model.
Gumagalaw din ang presyo. Ang Gemini 3.8 Flash, na nilipatan ng Prova at DIALØGUE noong Oktubre, ay nakalista sa $0.75 kada milyong input token at $3.75 kada milyong output token hanggang Disyembre 31. Mula Enero 1, 2027, dumodoble ito sa $1.50 at $7.50. Noong nakaraang buwan lang ako lumipat dito, at kailangan ko pang kuwentahin kung ano ang epekto nito sa gastos ko.
May panganib din ang pag-upgrade, at ayokong magkunwaring wala:
- Hindi nagtagal matapos kong ilipat ang Ask Sydney sa DeepSeek Flash, hindi bababa sa isang tanong ang nag-fail sa production dahil mas maraming search round ang gusto ng model kaysa sa pinapayagan ng code ko.
- Nang ilipat ko ang embeddings ng Prova, nag-fail ang mga unang run matapos ma-clear ang knowledge base table, kaya humina ang retrieval hanggang sa ma-recover ko ito.
- Sa parehong migration, lumabas ang isang production setting na magpapadala sana ng pangalan ng Claude model sa API ng Google.
Nakakabagot ang nagpatibay sa migration ng Prova. May naka-record akong evaluation mula bago ang pagbabago, 22 sa 24 na tamang sprint review decision, at parehong score ang nakuha ko pagkatapos. Kung wala iyon, umaasa lang sana ako.
Dapat mo ba itong i-maintain?
Ang pinakamahirap na tanong ay ang muntik ko nang hindi isama. Bawat app na shini-ship mo ay maliit na subscription na kailangan mong patuloy na bayaran ng atensyon mo, at pinadali nang husto ng AI ang pag-sign up sa mas marami pa.
Sa STRAŦUM, iba ang pinili ko. Ni-retire ko ito at in-publish ang v1 bilang reference implementation. Sinasabi ng repository na hindi ito mine-maintain bilang production service, at nakalista sa security file nito ang mga advisory na alam ko, kasama ang mga build-time dependency issue na walang available na fix, na tinatasa nitong mababa ang praktikal na panganib. Sa tingin ko, ganap na tapat na resulta iyon. Ang hindi tapat na bersyon ay isang app na tumatanggap pa rin ng signups habang walang nagbabantay dito.
Ang gagawin ko sa Lunes
Kung may na-ship ka gamit ang AI at may mga taong gumagamit nito, ito ang listahang uunahin ko. Wala rito ang kailangang maging perpekto.
- Patakbuhin ang audit nang isang beses, ngayon.
npm audit --omit=devopnpm audit --prod, sa bawat repo na live. Tapos tanungin ang AI tool mo kung alin sa mga resulta ang naaangkop sa pagkakabuo ng app mo, dahil hindi lahat ay naaangkop. - Gawing automatic ang check na iyon. Idagdag ito sa CI para makapag-fail ito nang hindi mo kailangang tandaan. Para sa app na bihira mong galawin, gumamit din ng scheduled run, dahil hindi makakatulong sa tahimik na buwan ang check na tumatakbo lang kapag may push.
- Basahin ang permissions mo, hindi lang ang packages mo. Itanong kung ano ang magagawa ng isang tao gamit lang ang public key mo at walang account. Tapos subukan ito sa local copy sa halip na mag-assume.
- Hanapin ang secrets sa history mo. Kung may totoong key na minsang na-commit, i-revoke ito. Hindi sapat ang pagbura ng linya.
- Alamin kung gaano kalayo ang inaabot ng logs mo bago mo pa kailanganin ang mga ito. Doon nakasalalay kung masasagot mo kailanman ang tanong kung may naabuso.
- Magtabi ng isang maliit na evaluation para sa bawat AI feature. Kahit 20 totoong halimbawa na may alam nang magagandang sagot ay magsasabi sa iyo kung pinalala ng pagpapalit ng model ang mga bagay.
- Regular na tingnan ang deprecation at pricing pages ng AI provider mo. Ilagay ito sa kalendaryo mo. Kung gumagamit ka ng Gemini 3.8 Flash, magandang petsa nang panimula ang Enero 1.
- Magpasya kung panatilihin o i-retire ang bawat app. Kung hindi mo ito babantayan, ibaba ito o sabihin mong hindi mo ito binabantayan.
Inaalam ko pa kung gaano karami rito ang puwedeng ipasa sa isang agent nang naka-schedule. Ang alam ko, walang na-patch ang pagsulat ng plano noong Oktubre 30.
Kung bumubuo ka gamit ang AI, kailan ka huling tumingin sa isang bagay na na-ship mo na, at ano ang nakita mo? Gusto ko talagang malaman, lalo na kung may mas mahusay kang alarm kaysa sa akin.