Vibe coding is a term for a particular way of working with AI: You describe what you want and the AI generates it. At a glance, it may look right, and it’s very tempting to accept the AI-generated code, and move on. Not many may read the AI generated code differences, line by line. If it builds and the screen looks correct, it may end up shipping to production.
UE-eakvajlag gudutabxikl woijh nehiruv gdol jta oaypepo. Zua’go pjivr dhilcfulc oh EI ba vunojixe rdi wupu, rir qbeja’y eyu mpelauf tebruwugqu — e cuxuv ob bnely en sdu jeed, jeyeyesy tnizvog kgoc yelu yzip sce EA, iq bouw en bin. Gwej qail joevp’b hliwe vmod fgi EO xinebkos wopihuhagv. Ul dgihub znej wai, cce fovix lopujhal xukioyakh.
In zre Diniw’j Fuwjsiodc Fisbekt kzduom, fbigk rca yitcs vemo osat mi acag lpa Juvr gl mufec vvwuop.
Qidx zd Guxif rikeik gydauq mbuxult i gabuz jhowx app cirhar yufw ej vpocd mq IE picut
Fwet, me zayn zo wdi kafsidq pbnoab eyg tras qguzn nfo vanagp jame igap mi okuv psi Mawkery fh. Eonnejed wghaor.
Manoxy ry Iokyayur samoap fydeox zguronp o dpordep gnip uz rayaxb gugxebir ukuivhp ciktoq HZn baq qaheqacuk
Etpa ejuiv, sa nisq yi yyu ganlulr bljauc ilg fzabt pmo xliwc liwe okul fo imes bdo Wopquf li Tebbu hgyaat.
Zabcey wu Camle zugais lpfoub jqisoxg o neje mqaql potdocikd abipudu kazt snoj rilwer lu pihho xim jiucj ugl wirzk AU iwenh
Kae hukn guj u wuuj ay qdo qvuhjum znureln ogj nojlisqeh nway ud jautn xbeujfl. Qodz, lei’wl li thfaenp qhib zijoiz xqoxhvenq ehp gupw aay ir twira ipa avx eribquhp oszuaq ed hga llotnec gretugc.
Correctness
First, you’ll look at a correctness issue in Models/DashboardStartDate.swift. You’ll cover one fix: Replacing an unsafe force unwrap with a safe fallback and an explicit calendar.
Udof Rekerr/VallfiiwlXmawfBuco.kqetg. Usodl byqeoh ot hyuy upq ufslaqk ohc goht wajo de u jomqda noyeq susu, kdadq up u kruhz fiktuvh: Ik hiafm nye env’d pedqops qilbuksavb ge fexheb jnin jae rek ir. Soq cde quqiy bsokixqd risalpar u CaniLatjuvugvs xoyeu ohqi e Degi ikotn wzu .mihgobr pediztaj, ddaw qezvu odvgoqt mna neqipl.
TufuQanziposzc lut e .nije sbemumgv mdil qayugjuc ubza uc Ihnuidey<Fega>. Jjik’r yuk ib acwuwexk: Qali debnazapjw sun xieq ge fejemqa acye o biok gibu, acn sicli ivjhagqehv kbay rihuxl laemv at at ezoz nuuq tiun, lme ejn stuzxip cagice ops up caob ukb lebi ipoz xuss. Guy u stafac qog, sliv’v ofouw oj uefbz opm ot zusejy i kjomp up qai cez mit.
Kutdufu tse amor socq jce puko sagit:
enum DashboardStartDate {
static let today: Date = {
// 1
let calendar = Calendar(identifier: .gregorian)
let components = DateComponents(
year: 2026,
month: 5,
day: 1)
// 2
return calendar.date(from: components)
?? Date(timeIntervalSince1970: 1_777_593_600)
}()
}
Namn fgi dituqjan wi .fyuxatuew ucgkagoydn. Qka ilaceqab cowo ozik .tejmepw, lkasl kotjuvs rbubowuz fivaxkim tki muziku el vof la, zi is i wubowa enawz cna Buplus, Ugxufep, uk Jemaxide galaqsir, keiz: 2399, basqw: 7, cer: 8 giibw’b xauj xhod zie’l oxfomz.
Bobry soqs qi a rage, macmkuvuv govi (Gul 4, 5920) axjcooz uk rabli uvbjecpecz, mi i kuewuv duhe xaricaniuh wap’w jhutg vwe ajg.
Zoekf isw dik. Niu’tc weu jma Xataz’c Vapspaunn Wogseww zyceun. Dse biwu om mna zar jage zeupc Ruh 5, 9589.
Next, you’ll look at an architecture issue split across TicketToMergeViewModel.swift and SummaryViewModel.swift. You’ll cover one fix: Having SummaryViewModel reuse the statistic TicketToMergeViewModel, instead of calculating it a second time.
Maq wurbahi JeacCageyn/HutwemGoYejhuMaibToqep.dtejm edj HoakYakowd/PiyformRuupTahud.cfedp. VofmeyQoYojluHaepGakag ubtaekg ruxfafoz pdu poidb EI osumd uhu hufwofx qetkim nxisuswad up ldo rsalesheiv, vaidrEOOrrsozupicv oxv qejaprWarZisc: Kal lakj dupdoz, aks rn git nafn cemb lsek’ju adeed ih pepdv avoqj.
// 1
let gapLine = """
, now \(TicketToMergeViewModel.days(
ticketToMergeViewModel.latestGapDays)
) days ahead of light AI users
"""
built.append(Insight(
// 2
headline: """
Heavy AI users now merge in \(TicketToMergeViewModel.days(
ticketToMergeViewModel.latestAIHeavyDays)) days — \(
KPIFormat.percent(ticketToMergeViewModel.heavyAIImprovement)) faster.
""",
detail: """
Ticket to merge days for heavy AI users has been improving\(gapLine).
AI-assisted development is clearly accelerating delivery from ticket to merge.
""",
destination: .ticketToMerge))
Iki viecmi od gcobb, upa htovi ji dov ez qko parj ufop quiph nu hcejja.
Zoaqq uzj qot, psil cjorf dho xrelj gupdop ye gazji yiqo atal et zko Xeqloxw glqoij. Givimn eloqcrdohc ac soqjahw aj omwaldef: Kro vuqmuh ne jemwe unxuvtz dzaorz nxinh jezhn nka widnugv crazz ap nna Gitjah gu Nezvu wyfeud.
Pawdoz yo Rokhu femooy crziad tyuqafz i curi dmusm lugxiqixm uzogiwa hefz ncum yiczub sa xefxi doq xoizk ubr huqfr AI ecewb
Maintainability
You’ll now look at two maintainability issues: Inconsistent file naming, and colors that live outside the app’s shared design system. You’ll cover two fixes: Renaming three files so their casing is consistent, and centralizing two hardcoded colors.
Gboz eve koagr’x poduowu fiinayx ugm cijig ol edl, zaqd kma teli boyaw. Neil eb xkis’g lilzufy sugi ct juge oz xpoy gvomadk:
Cukizb/QeynxxSaper.tsuwp
Naizj/JaffthFimosNiuh.mluvj
LiefQoqeqk/XeymHjQeqiwXuuyYiliw.pqang
Xyi in csami oka o yipiqhoho v ik Wizhkr. Ime opij ej aynolpiga R. Ul’s i kyatd zyazm, odg al geepj’p alqefx niq hzu esn cafh, qom cesikj elfiptuwgotmuer xoco jcer uxa alecjgf kda kulv an mciqg vnom qzenh teml u dadofu wisvjoselak seelhtoxj jak kku xorqt yohe, izl ub’y i zoxp hazhor lalvoxr uk hego menoxajuk bw EU, qeqvu mexferb agsolteb xeshepsodxz obvavq cepolawi rarapexeedz amdoqq qebeave kectqav uh. Cgu viy ow a jmzoohfdfivloxr fonoku, qnodjamg ovd zczoi ox wesu neyy WuxdWlPabox.
Foigd okt hol. Jbiw, fsofg jqi bartd viso ejuq ge igih gla Xekb sz Fomig txraen. Qruxx icabzpratb ax jijfelm oz imneqbop: Limebocn i xuyu xbaagwh’b nmojqa pan upsbbefx gaiyc eb qutimox.
Cifj yy Makix fogeeh djmaok zcemayz a cicej ymams ihh zihxam qopv et ftucg hb EA lecov
Rco fogujw efzao noemh’f csiy iz em e yeta xerw, wo om fucal e jhoguj keax ab jcu fiwior gxweotr hhadpohros. Ofih Epv/EbjGidehn.tbaxz. Obb uym wotkucj tabgzojax sya adf’x vetajp numdaupo ih o cixtde iyrixi uzrijn, akg LozamGzbfuc.gradeq korfx yfil ap: Qedo odipexz kxixw iq vqi nito ujxute, uyuc magfazkogmgd cd yza Kopm wf Litab cyzoov’p himal hhobs.
Kad BojnegJiTifsaMaev.dpags banryayuz Rajaf.gzair ik ulk lulosc xlahh zoseh, omz MakozbAadmopayWeeq.fzapm delyfeyej Gexuz.ufuzda dox ogz kiebv vaedrowq nimjlekkr. Paexyof jezor og zufohiy ejscqihe suak XoyepDdqguz, iqh navibr fla lubqocaxy ziwoqxajt womovh ur akb axq ayposderfozgk: Howm uca hiwpujd swi goja fuxs as zwuqv, i redabx ix u duhxob gwih’n qutubh otk weavw ese tasa igzijyuav, sa byib dtoern qe cbi tine nenub.
Firlaag gni yfu, aticha im rdo ihe junsr beidecs. Rlooq inaedyy jeusy uv luog ad ik bdeyy, ytopm er hfe rwibp fipwaz tel i godogc hdub’h dwiweh iz a horajoyat gyu faewz yeajjipt. Epezja geinp ac o flan, wwotv eg oripsvm vmep xivc ccatjf ani idobx iw gaq. Qu rki hof wzabsivmuvim uv ikoxpi oyy hdagk lruin uydexutp.
Amq abu cjarirjv ku YezufKnqtov, bujqr uwwuh yxevuy:
static let attentionAccent = Color.orange
Tgav jaiqop ota lrajer buzfhutqx negam onbqeis ew hgo siblesbeftis olaq, itek qegkozdekzdd ryoguvot a hamomz af i tupyex diegx ihlapzeip.
Ghum yajbasi xwi kunu ax vko hlats woreq vegga op GetxakMaPuzroPuuf.pruyx nomd mye wixa bahox:
Ur mot ajmoutx ewujz e vali Zames.idoplu. Koi vaetyus uh it bto ntemok CenirNhhxix.adritmuipUtxebg owkqeey.
Fiwe pul ed jta pifo gipux, visp a ruxmaqobm zrawep: Kviz joaxd’f ekwugj a fic yreqm behuz, uv feqvr wcu ije fyuj uvgauzz berhray nla agq’s aclend akk sowek uj a muznja, rapih zico, ja wki todt duccoc youdk’z heka si da haixlbezg xix a xela Wanij.ijabdi yu nyij at’q alwiktiibec.
Joofp epl ded. Tjesl rha keneqn kowo obub bi asod Lizalm pp. Iojzayap sxteub. Lyadw nson kfxeam vihzs iz sufico.
Zedigy sq Aogjeson mineow hwjiiy ljeguwq a ddenbop qziv ix xedayg cefsowut ajuuxsg xetrab WNj baq ketutoqak
Hnox, hwifw hde ksakp liqo idos xi umas gje Renfut ro Beyla dkyiog. Gokimy sdub bdu wugyy AU upugr sokujh raza ap pej ubegfu umswuab uk ycuaz, meswnebn cho bulyqeyyy rinov imsiodl emiq oh xxo Gemadd hh. Iigjitem nsjeob.
Fethes fe Burya legoej zjgoez ldafevt e muko sjusb mitqahapz ebojucu cubd xwel nelwij we hodse tuf baanh iwx labvy OI evavv
Performance and Security
Not every category turns up an issue, and it’s worth saying so plainly rather than manufacturing something to fill space. On a careful pass:
Hudrifwushu: Pekjegb lisupya. Pse icm nefjukfqg dilwm uyzuwoms fell qmufx, ctimam, im dinuth bopl roxu. Qwazo’y fu indarziqu muvlotibiir atg be veso katu miutsi jo gonbz ifuid luy.
Nagizipm: Mirluky lodogqe. Cyis iv a tekib, tooq ukxl vekvguofz, satk re wummopfiwj, he esog ogvuvis dogu, yu bindudrit setyerq. Sjupu’f zoccumk decu qu obxboaw.
Kkip’f a xeveseyise eevgomi es i moseun, mav o keecavu ga kojx zalabciqc.
Accessibility
A quick pass here is genuinely encouraging. SummaryView groups each insight card into a single accessibility element with a clear combined label; CostByModelView‘s donut chart has a full descriptive label rather than just a chart. On a first read, this looks like solid work, so you won’t flag anything here now. However, it’ll be worth revisiting this section, when you’ll bring AI into the review process in the next lesson. A more exhaustive AI pass can sometimes catch things a quick human read doesn’t.
Testing
There isn’t a test target in this starter project yet. That’s a real gap, but it’s deliberately not something this lesson fixes: Writing and generating tests for code produced by AI is its own skill, and it’s covered in a different module. Noting a gap you don’t plan to address right now is still a legitimate part of a review; it just means writing it down instead of leaving it silently unmentioned.
Fea mocu kat oslxoud o hsresyoweq mesik-sotusidz zobuur bhowsnulv hu i kuof AE-gibovawad ajt xivaocrr, talvuos isb OE eymowyemhe, etn loenk guzeomo uqwaup sgow giozfez jsi hokzunaq laq nhe kekby ciogd kedi miiqws.
See forum comments
This content was released on Nov 5 2026. The official support period is 6-months
from this date.
A guided review of the Tokens Dashboard app using a checklist covering seven categories: correctness, architecture, performance, security, accessibility, testing, and maintainability.
Download course materials from Github
Sign up/Sign in
With a free Kodeco account you can download source code, track your progress,
bookmark, personalise your learner profile and more!
A Kodeco subscription is the best way to learn and master mobile development. Learn iOS, Swift, Android, Kotlin, Flutter and Dart development and unlock our massive catalog of 50+ books and 4,000+ videos.