Dusk
Today is a special day for me—one that I’ll remember for a long time. Along with two close friends, I just completed my first professional project! It took us nearly a month and a half to build and deliver, and we walked away from it wiser, sharper, and a lot more confident than when we started.
Our client was the owner of Hometown Pizzeria, a cozy restaurant tucked away in the heart of Darjeeling. If you ever get the chance to visit, don’t miss this spot—it serves incredible food at amazing prices and has a vibe that instantly makes you feel at home. And if you get to meet the owner, you’re in for a treat—he’s one of the most cheerful and funny people we’ve worked with. His trust and patience made this entire journey worthwhile.
The project brief was simple: he needed a reliable ordering and billing system that could run smoothly on a Windows 7, low-spec PC, and print receipts on a thermal printer. No fluff. Just something that worked.
We started with an ambitious plan. We decided to use Django for the backend, Jinja Templating for rendering, and thought we’d package it all using Electron to make a desktop app. It sounded solid—until we began building.
Turns out, it wasn’t such a great plan after all.
The Backend Work – Order Create Page
I was responsible for building the backend logic, and the app was divided into five core sections:
- Order Create Page
- Login Page (Admin only)
- Update/Add Items Page
- Statistics Page
- Order History Page
The Order Create Page, in particular, required a surprising amount of thought. It included:
- Item Search Bar
- Adding Item to Cart
- Displaying Current Items
- Order Search Functionality
- Showing Recent Orders
One of our goals was to avoid page reloads, and to make that happen, we leaned heavily on htmx. But htmx can be tricky—it needs specific targets, and if not configured carefully, it can cause recursive rendering issues. We had to meticulously split the template into partials and reusable components to ensure smooth rendering.
We used similar logic for the add item functionality and extended the search bar to pull up both unpaid and paid orders seamlessly.
What’s Coming Next?
In the next part, I’ll dive into the rest of the features we built and some of the performance challenges we faced. Here’s a teaser:
One day, the client called us after we installed the beta version. “The software’s too slow,” he said. We checked the performance and found one page took 66 seconds to load.
That was unacceptable. We went back to work and after profiling and optimizing the code, I brought that down to 0.07 seconds. Yes, you read that right.
I’ll break down exactly how we made that happen in the next update.
Peace out!