Café & WiFi Finder Web App

A full-stack site buildt with Python & SQLite to display cafés with WiFi, good coffee and workspace-friendly features.

Posted by CM-WebDev on November 10, 2025

Project Overview

This project is a full-stack web app built with Flask and SQLite, allowing users to view, add, and delete cafés with WiFi, power sockets, and coffee details. It was designed as a showcase of clean, maintainable code — following best practices like modular routing, minimal dependencies, and clear data-model alignment.

Core Technologies

  • Python – backend logic and data management
  • Flask – lightweight web framework for routing and templating
  • SQLite – file-based database for persistence
  • Bootstrap – responsive, mobile-friendly frontend
  • Jinja2 – clean and reusable HTML templating

Technical Execution & Problem Solving

Database access was abstracted via a helper function using sqlite3.Row for named-column access, improving readability. Routes were kept intuitive (/, /add, /delete/<id>) and implemented using the POST–Redirect–GET pattern to avoid duplicate submissions. Templates were minimal and reused across views, while database connections were closed promptly for reliability. When initial queries failed due to a schema mismatch, I updated them to match the actual table (Cafe) and its column names — demonstrating debugging discipline and adaptability.

Key Features

  • Displays a dynamic list of cafés with details like location, seating, WiFi, sockets, and coffee price
  • Add and delete cafés via forms mapped directly to the database schema
  • Responsive interface built with Bootstrap for seamless desktop and mobile use
  • Lean and readable codebase — short, well-structured routes with clear comments

Demonstrated Skill Set

  • Backend development: routes, SQL integration, and CRUD operations
  • Frontend: templating, layout, and responsive design
  • Database design and debugging: schema matching, column mapping, and query handling
  • Best practices: clean architecture, separation of concerns, and minimal dependencies
  • Production awareness: extensible structure for future features (auth, filters, APIs)

What I Learned & Next Steps

Building with Flask and SQLite reaffirmed the value of simplicity — a lightweight stack can still demonstrate real full-stack capability. If iterating further, I’d add form validation, search filtering, and user authentication. Eventually, migrating to SQLAlchemy and adding unit tests would support growth and maintainability.

Key takeaway: clarity, structure, and adherence to best practice matter more than over-engineering — the result is a project that’s both functional and employer-readable.