[{"data":1,"prerenderedAt":422},["ShallowReactive",2],{"\u002Fposts\u002F2024-in-review":3,"posts-nav":384},{"id":4,"title":5,"body":6,"date":372,"description":373,"draft":374,"extension":375,"meta":376,"navigation":377,"path":378,"seo":379,"stem":380,"subtitle":381,"tags":382,"__hash__":383},"posts\u002Fposts\u002F2024-in-review.md","2024 in review as a frontend engineer",{"type":7,"value":8,"toc":353},"minimark",[9,14,61,64,76,79,116,119,122,125,132,136,139,143,156,200,204,209,218,222,235,239,247,251,254,263,267,270,322,325,346,350],[10,11,13],"h2",{"id":12},"table-of-contents","Table of contents",[15,16,17,25,31,37,43,49,55],"ul",{},[18,19,20],"li",{},[21,22,24],"a",{"href":23},"#introduction","Introduction",[18,26,27],{},[21,28,30],{"href":29},"#academic-milestone","Academic Milestone",[18,32,33],{},[21,34,36],{"href":35},"#full-time","Career Highlights",[18,38,39],{},[21,40,42],{"href":41},"#portfolio-launch","Personal Project",[18,44,45],{},[21,46,48],{"href":47},"#courses-i-took","Courses I took",[18,50,51],{},[21,52,54],{"href":53},"#community-engagement","Community Engagement",[18,56,57],{},[21,58,60],{"href":59},"#conferences","Conferences",[10,62,24],{"id":63},"introduction",[65,66,67,68,72,73],"p",{},"Hi there! This year has been a whirlwind of challenges, growth, and achievements. Juggling my final year in school, a full-time job, and\npersonal development was no easy feat, but looking back, I’m filled with gratitude for every milestone.\nI decided to finally write and publish this post because of something I read in one of my favorite book — Atomic Habits.\nIn a particular chapter the author differentiates between ",[69,70,71],"em",{},"being in motion"," and ",[69,74,75],{},"taking action.",[65,77,78],{},"Here are some snippets from\nthe book:",[15,80,81,92,98,104,107,113],{},[18,82,83,84,87,88,91],{},"If you outline twenty ideas for articles you want to write, that’s ",[69,85,86],{},"motion",". If you actually sit down and write an article, that’s ",[69,89,90],{},"action",".",[18,93,94,95,97],{},"Sometimes ",[69,96,86],{}," is useful, but it will never produce an outcome by itself.",[18,99,100,101,103],{},"We decide to get in ",[69,102,86],{}," because we actually need to plan or learn more. But more often than not, we do it because motion allows us feel like we’re making progress without running the risk of failure.",[18,105,106],{},"Most of us are experts at avoiding criticism. It doesn’t feel good to fail or be judged publicly, so we tend to avoid situations where that might happen.",[18,108,109,110,112],{},"That’s the biggest reason you slip into ",[69,111,86],{}," rather than taking action: you want to delay failure.",[18,114,115],{},"⁠Motion makes you feel like you’re getting things done. But really, you’re just preparing to get something done.",[65,117,118],{},"The moment I read this, I knew I actually needed to publish the post. For the past few months, I have just outlined a bunch of article ideas. I had a false sense of progress. I was just in motion but somehow, I never really took action.",[65,120,121],{},"So here’s me taking action. Finally!",[10,123,30],{"id":124},"academic-milestone",[65,126,127,128,131],{},"I'd be starting with how grateful I am to God for an intense academic journey. I wrapped up my final exams in July,\ngraduating with ",[69,129,130],{},"first class honors"," from the Department of Building, Obafemi Awolowo University.\nAchieving this while balancing other aspects of my life is a testimony of God's favour and help. Despite a very busy final year\nI decided not to take full pause on coding. From time to time, I still read a few articles from my favourite developers,\npracticed some code snippets and stayed in tune with frontend trends and news.",[10,133,135],{"id":134},"full-time","Full Time",[65,137,138],{},"In May, I landed my first full-time job as a Frontend Engineer in a fintech and Web3-based startup.The first few months were far from easy.\nI worked on multiple products simultaneously, tackled production bugs, and handled tight deadlines.\nThese experiences, though tough, strengthened my resilience, problem-solving and communication skills. One of my proudest achievement was filling in for a backend developer in the organization I work for by creating a database with Google Sheets and conecting it to the frontend of an application. I majorly enjoyed working on refactoring about 20% of our large codebase for easier readability.",[10,140,142],{"id":141},"portfolio-launch","Portfolio Launch",[65,144,145,146,148,149,155],{},"Phew! Throughout the year, I had just been making plans (being in motion), without really taking ",[69,147,90],{}," like I described in the introduction. I finally gathered my excuses,\ndetonated them, and then did what I had been procrastinating all year. I found a good template I could work with, blocked out time amidst my overloaded schedule, and created something I could showcase to the world. Big thanks to ",[21,150,154],{"href":151,"rel":152},"https:\u002F\u002Fwww.freecodecamp.org\u002Fnews\u002Fhow-to-build-a-portfolio-site-with-sanity-and-nextjs\u002F?ref=victoreke.com",[153],"nofollow","Victor Eke"," for the inspiration.\nI strongly recommend if you're finding it hard creating a portfolio for yourself. Here are some of the tools\u002Flibraries\u002Fframeworks I used while building my portfolio site:",[15,157,158,165,172,179,186,193],{},[18,159,160],{},[21,161,164],{"href":162,"rel":163},"https:\u002F\u002Fnextjs.org\u002F",[153],"Nextjs",[18,166,167],{},[21,168,171],{"href":169,"rel":170},"https:\u002F\u002Fui.shadcn.com\u002F",[153],"Shadcn",[18,173,174],{},[21,175,178],{"href":176,"rel":177},"https:\u002F\u002Ftailwindcss.com\u002F",[153],"TailwindCSS",[18,180,181],{},[21,182,185],{"href":183,"rel":184},"https:\u002F\u002Fmdxjs.com\u002F",[153],"MDX",[18,187,188],{},[21,189,192],{"href":190,"rel":191},"https:\u002F\u002Fwww.typescriptlang.org\u002F",[153],"TypeScript",[18,194,195],{},[21,196,199],{"href":197,"rel":198},"https:\u002F\u002Fwww.sanity.io\u002F",[153],"Sanity",[10,201,203],{"id":202},"courses-i-took","Courses I Took",[205,206,208],"h3",{"id":207},"learn-nextjs-by-vercel","Learn Nextjs by Vercel",[65,210,211,212,217],{},"Though I initially completed this ",[21,213,216],{"href":214,"rel":215},"https:\u002F\u002Fnextjs.org\u002Flearn?utm_source=next-site&utm_medium=homepage-cta&utm_campaign=home",[153],"course"," last year, I revisited it to deepen my understanding of Next.js.\nThe concepts and techniques I learned played a crucial role in my daily work.",[205,219,221],{"id":220},"zod","Zod",[65,223,224,225,229,230,234],{},"I decided to tackle my aversion to form validation and took Matt Pocock’s ",[21,226,216],{"href":227,"rel":228},"https:\u002F\u002Fwww.totaltypescript.com\u002Ftutorials\u002Fzod",[153]," on Total TypeScript.\n",[21,231,221],{"href":232,"rel":233},"https:\u002F\u002Fzod.dev\u002F",[153],", a lightweight schema declaration library, became my favorite tool for form validation. I shared all my code solutions and thought process\npublicly to stay accountable.",[205,236,238],{"id":237},"beginners-typescript","Beginners’ TypeScript",[65,240,241,242,246],{},"About two years ago, I never imagined I would be using TypeScript so much in my code. Now, it's a language I've grown to love and use. To refresh and reinforce my\nknowledge, I took this ",[21,243,216],{"href":244,"rel":245},"https:\u002F\u002Fwww.totaltypescript.com\u002Ftutorials\u002Fbeginners-typescript",[153]," from a TypeScript wizard I respect. Thank you Matt! 🙌🏿",[10,248,250],{"id":249},"community-engagement-and-open-source-contributions","Community Engagement and Open Source Contributions",[65,252,253],{},"A solo developer can do 10x. But a developer within a community of great developers would do 100x. This year, I've come to greatly cherish the\npower of a programming community. I became more active in well-respected JavaScript community by asking more questions when I needed help,\nassisted others when they needed help, discuss technologies, made friends, and of course I enjoyed listening to other developers argue about their\nfavourite tools and techniques.",[65,255,256,257,262],{},"Also, this year I enjoyed contributing to open source projects. My biggest was contributing severally to the ",[21,258,261],{"href":259,"rel":260},"https:\u002F\u002Fneon.tech\u002F",[153],"Neondb"," PostgreSQL tutorial page. The joy of seeing your\nPRs merged in an emerging technology is truly satisfying.",[10,264,266],{"id":265},"favourite-tools","Favourite tools",[65,268,269],{},"I used a lot of tools, libraries etc this year at work, and also for my personal projects. Here's list of my top tools\u002Flibraries\u002Fframework I really enjoyed using\nthroughout the year.",[15,271,272,277,282,287,292,297,302,309,314],{},[18,273,274],{},[21,275,185],{"href":183,"rel":276},[153],[18,278,279],{},[21,280,192],{"href":190,"rel":281},[153],[18,283,284],{},[21,285,221],{"href":232,"rel":286},[153],[18,288,289],{},[21,290,164],{"href":162,"rel":291},[153],[18,293,294],{},[21,295,171],{"href":169,"rel":296},[153],[18,298,299],{},[21,300,178],{"href":176,"rel":301},[153],[18,303,304],{},[21,305,308],{"href":306,"rel":307},"https:\u002F\u002Fwww.prisma.io\u002F",[153],"Prisma",[18,310,311],{},[21,312,261],{"href":259,"rel":313},[153],[18,315,316,317],{},"Framer motion, now known as ",[21,318,321],{"href":319,"rel":320},"https:\u002F\u002Fmotion.dev\u002F",[153],"Motion",[10,323,60],{"id":324},"conferences",[65,326,327,328,333,334,339,340,345],{},"I was privileged to accompany my CEO to a Blockchain Conference in Lagos organized by ",[21,329,332],{"href":330,"rel":331},"https:\u002F\u002Fbusinessday.ng\u002F",[153],"Business Day",". The theme was centered around harnessing blockain for\neconomic and social transformations. It was a good opportunity to network and hear some of the big players in the industry.\nAnother notable conference I attended was organized by the ",[21,335,338],{"href":336,"rel":337},"https:\u002F\u002Fgltife.tech\u002F",[153],"Ife Tech Community"," tagged Digital Discovery.\nI was honored to speak as a ",[21,341,344],{"href":342,"rel":343},"https:\u002F\u002Fwww.instagram.com\u002Fp\u002FDC49kAHItZ3\u002F?igsh=MXVwOTZheHF3d2Znbw==",[153],"panelist"," at the conference about the\nuse of AI tools while learning to code.",[10,347,349],{"id":348},"happy-new-year","Happy New Year!!!",[65,351,352],{},"Aaaaaaaaand it's a wrap! I'd like to wish everyone a happy new year in advance. This year was a blend of challenges and triumphs.\nEvery challenge pushed me to grow, and every triumph reminded me of what’s possible with determination and faith. Here’s to an even better 2025!\nCheers to growth, collaboration, and serving the world through software.",{"title":354,"searchDepth":355,"depth":355,"links":356},"",2,[357,358,359,360,361,362,368,369,370,371],{"id":12,"depth":355,"text":13},{"id":63,"depth":355,"text":24},{"id":124,"depth":355,"text":30},{"id":134,"depth":355,"text":135},{"id":141,"depth":355,"text":142},{"id":202,"depth":355,"text":203,"children":363},[364,366,367],{"id":207,"depth":365,"text":208},3,{"id":220,"depth":365,"text":221},{"id":237,"depth":365,"text":238},{"id":249,"depth":355,"text":250},{"id":265,"depth":355,"text":266},{"id":324,"depth":355,"text":60},{"id":348,"depth":355,"text":349},"2024-12-31","Looking back on 2024 — finishing my degree, my first full-time frontend role, shipping a portfolio, and the courses that got me there.",false,"md",{},true,"\u002Fposts\u002F2024-in-review",{"title":5,"description":373},"posts\u002F2024-in-review",null,[],"tVTHLkM3_KvftEwT54mZEir67UOlz4354HiF3HBaBEo",[385,389,393,397,401,405,409,413,417,421],{"path":386,"title":387,"date":388},"\u002Fposts\u002Ffunctional-options-may-not-always-form-closures","Functional options may not always form closures","2026-10-06",{"path":390,"title":391,"date":392},"\u002Fposts\u002Fgo-closures-functional-options-pattern","Understanding closures in Go through the functional options pattern","2026-09-25",{"path":394,"title":395,"date":396},"\u002Fposts\u002Fgoing-with-go","Going with Go","2026-09-14",{"path":398,"title":399,"date":400},"\u002Fposts\u002Fcollecting-blogs","Collecting blogs","2026-09-10",{"path":402,"title":403,"date":404},"\u002Fposts\u002Fhello-world","Hello, world!","2026-08-01",{"path":406,"title":407,"date":408},"\u002Fposts\u002Fwhy-my-first-react-app-should-have-been-tic-tac-toe","Why my first React app should have been tic-tac-toe","2025-07-02",{"path":410,"title":411,"date":412},"\u002Fposts\u002Ftyped-and-tested","Typed and tested","2025-05-29",{"path":414,"title":415,"date":416},"\u002Fposts\u002Fforms-without-the-stress","Forms without the stress: React hook form does it best!","2025-03-16",{"path":418,"title":419,"date":420},"\u002Fposts\u002Fdata-fetching","Data fetching in React","2025-01-26",{"path":378,"title":5,"date":372},1791245350889]