Have you ever arrived at the grocery store only to realize you left the important shopping list sticking to the refrigerator door at home? It is a very common problem that can lead to frustration and forgotten items. Today, we are going to explore a smart digital solution called Koffan, a self-hosted application that ensures your family’s shopping list is always in your pocket.
To understand why Koffan is such an interesting piece of software, we first need to look at how it was built. Many modern web applications are quite heavy, meaning they use a lot of computer memory to run. The developer of Koffan originally wrote the app using a framework called Next.js, but they realized it was using too many resources. To fix this, they rewrote the entire application using the Go programming language. This change resulted in an incredibly lightweight app that only takes up about 16 megabytes of space and uses very little RAM. For a computer science student, this is a great example of how choosing the right programming language can make software much faster and more efficient. The app uses a technology stack that includes Go for the backend, SQLite for the database, and HTMX with Tailwind for the visual design.

One of the most user-friendly features of Koffan is how it handles logging in. Instead of requiring every member of your family to create their own username and email account, the app uses a single shared password. This means you can simply send the website link and the password to your parents or siblings, and they can start adding items to the list immediately. Once you are logged in, you can create different lists for different needs, such as a weekly grocery run, a hardware store trip, or a list for a specific party. Inside these lists, you can organize items by sections. This is very helpful because grocery stores are organized by aisles, like dairy, produce, or meat. By grouping your items in the app, you do not have to run back and forth across the store.
A very cool technical aspect of this application is how it handles real-time synchronization. Imagine you are at the store and your mom is at home realizing she needs eggs. If she adds eggs to the list on her computer, it will appear on your phone screen instantly without you needing to refresh the page. This works through a technology called WebSockets, which creates a continuous connection between the server and your device. It is similar to how a walkie-talkie works, allowing instant communication. Additionally, if you cannot find an item, there is a feature to mark it as “uncertain,” which flags the item so you can ask for clarification later.
For those of you interested in how software is created, there is an interesting detail about Koffan’s development. The creator used an Artificial Intelligence assistant called Claude AI to help write the code. This is sometimes called “vibe coding.” While AI can be a very helpful tool for programmers, it is important to remember that we should always review the code to make sure it is safe and works correctly. Using AI is a great way to speed up work, but as a student, you should always try to understand what the code is doing rather than blindly trusting the robot.

- Ultra-lightweight – ~16 MB on disk, ~2.5 MB RAM
- Multiple lists – Create separate lists for different stores or purposes, with custom icons
- PWA – Install on your phone like a native app
- Offline mode – Add, edit, check/uncheck products without internet (auto-sync when back online)
- Auto-completion – Fuzzy search suggestions from your history, remembers sections
- Organize products into sections (e.g., Dairy, Vegetables, Cleaning)
- Mark products as purchased
- Mark products as “uncertain” (can’t find it in the store)
- Real-time synchronization (WebSocket)
- Responsive interface (mobile-first)
- Dark mode – Automatic theme based on system preferences
- Multi-language support (PL, EN, DE, ES, FR, PT, UK, NO, LT, EL)
- Simple login system
- Rate limiting protection against brute-force attacks
- REST API – Programmatic access for integrations and migrations (docs)
Now, let us discuss how to actually get this running on your home server. The application is designed to be installed using Docker. The easiest way to manage this is by using a Docker Compose file. If you find a command that starts with “docker run,” you can use a tool called “Composerize” to turn it into a neat Docker Compose format. This makes it easier to change settings later. To install Koffan, you would write a script that tells the computer to download the image, set the port to 80, and create a volume so your data is saved even if the computer restarts. You will also need to set your custom password in this file.
Here is an example of what that configuration might look like:
version: '3.3'
services:
koffan:
container_name: koffan
image: 'plunkett/koffan:latest'
ports:
- '80:8000'
volumes:
- '/path/to/data:/app/data'
environment:
- PASSWORD=YourSuperSecretPassword
restart: unless-stopped
Once the application is running on your server, you can access it through your web browser. However, Koffan has another trick up its sleeve called a Progressive Web App, or PWA. This allows you to install the website onto your phone just like a normal app from the App Store. When you visit the site on your mobile browser, you should see an option to “Add to Home Screen.” This gives you a nice icon on your phone and allows the app to work very smoothly, even if your internet connection is a little spotty. It is a modern way to build apps that work on both computers and phones without doing double the work.
By setting up Koffan, you are not just getting a digital shopping list; you are learning about efficient software design, real-time networking, and self-hosting with Docker. It solves a real-world problem by keeping your household organized and ensures that you never have to guess what you need to buy. I highly recommend you try deploying this on your home lab to see how responsive a Go-based application can be. It is a small project that offers a big reward in daily convenience.
