On August 29, 2026, I attended the Build2Learn hackathon/collab event held at Grootan Technologies in Perungudi, Chennai, from 9:00 AM to 2:00 PM. I walked in with no big idea of my own.
What is Build2Learn?
Build2Learn isn't a regular seminar. It's not about theory — it's a high-energy space where people actually build software and learn by doing. The crowd included many senior professionals with 5 to 20 years of experience across IT companies.
Watching how these senior engineers think, two things became clear to me:
Fast Product Delivery* — They don't waste months planning. They identify the core value, build a working prototype, and get it into users' hands right away.
Real-Time Problem Solving* — No matter how big or difficult a task looks, they break it into small parts and solve it quickly using modern tools.
Suresh Anna and His "Noolagam" Project
While looking around for someone to help, I met Suresh. He was building "Noolagam" — a digital library/book platform project. His tech stack was quite modern:
- Frontend: Flutter
- Backend: Hono.js
My own background was a bit different — I know Node.js, Express, and MySQL reasonably well, and I'm currently learning backend development with TypeScript, Drizzle ORM, and SQLite.
Even though our tech backgrounds didn't fully match, Suresh's project needed a Book Review System. I saw this as my chance and offered: "I'll get the backend schema ready for the review feature for you." He agreed. The clock started — I had exactly 2 hours.
** Technical Implementation**
The login page wasn't fully ready yet. So instead of waiting for it, I thought like an agile developer and planned to run the review feature using a guest-user system (as Suresh suggested).
Here's the code I wrote using TypeScript and Drizzle ORM for the SQLite database:
import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core';
import { books } from './books';
export const reviews = sqliteTable('reviews', {
reviewId: integer('id').primaryKey({ autoIncrement: true }),
bookId: integer('book_id')
.notNull()
.references(() => books.id, { onDelete: 'cascade' }),
username: text('username').notNull(),
reviewText: text('review_text').notNull(),
rating: integer('rating').notNull(),
isHidden: integer('is_hidden', { mode: 'boolean' }).default(false).notNull(),
createdAt: text('created_at').default(new Date().toISOString()).notNull()
});
Breakdown of the design decisions
bookId constraint* — .references(() => books.id, { onDelete: 'cascade' }). This was new to me, and I asked Gemini to explain what it does and learned it from there. It means that if a book is deleted from the Noolagam app, all its associated reviews get cleaned up automatically from the database — keeping the database from filling up with orphaned data.
- username fallback — Since there's no login system yet, taking it directly as a text string was useful, letting the frontend team connect their UI to our backend quickly for testing.
- isHidden state — Important for handling unwanted spam comments: instead of deleting them outright, they can be hidden from the app while still being kept in the database.
A senior developer (Gokul anna) taught me how to use Claude AI as a pairing partner — how to prompt it correctly to structure code, quickly debug TypeScript type-definition errors, and design with UX in mind. That day, I truly understood how modern developers multiply their working speed using AI.
Finally, I created a new feature branch (feature/book-reviews) in Suresh's project repository, wrote and tested the code, finalized the schema, and successfully pushed it to the repo to be integrated with their Hono.js/SQLite ecosystem.
Top comments (0)