Skip to content

Building Spokane Tech: Part 1

Welcome to the first part of the "Building Spokane Tech" series! In this article, we explore the tech stack, and design decisions.

See the live site at: https://www.spokanetech.org

See the latest code on: github

Requirements

For the first phase of our project we want to identify all the tech related community groups in the Spokane area, gather data about them and ingest and present events they host in one location. To make this happen we'll need a couple things. - web interface for displaying groups and events - a database to store the groups, event, and associated information - code that can gather data from applicable event sites - a means to execute that code on a regular cadence

Tech Stack

Our tech stack will be comprised of the follow technologies (accompanied with a brief description of each):

Python

Role: Primary programming language

Responsibility: Powers the application backend, providing a robust, readable, and flexible foundation for building web functionality and handling logic.

Django

Role: Web framework

Responsibility: Facilitates rapid development of secure and maintainable websites, handling URL routing, views, models, forms, and authentication. It integrates well with databases and supports REST API development.

Gunicorn

Role: WSGI HTTP server

Responsibility: Serves as the bridge between your Django application and the web server (e.g., Nginx). It efficiently handles multiple requests concurrently and scales well for production.

Redis

Role: In-memory data store

Responsibility: Used as a message broker for Celery tasks, caching, and real-time features like notifications or session management.

Postgres

Role: Database

Responsibility: Provides a reliable, scalable, and feature-rich relational database for storing application data, such as user information, product records, and transaction logs.

Celery

Role: Task queue

Responsibility: Manages asynchronous tasks (e.g., sending emails, processing files) by offloading time-consuming operations to background workers, improving responsiveness.

Celery Beat

Role: Scheduler for Celery tasks Responsibility: Executes periodic tasks by scheduling them at specific intervals (e.g., daily reports or regular database cleanup).

HTMX

Role: Frontend interaction library

Responsibility: Enhances user experience by enabling server-side rendered dynamic content updates without full page reloads. Simplifies AJAX requests, WebSockets, and DOM updates.

Bootstrap 5

Role: CSS framework

Responsibility: Simplifies frontend design with a responsive, mobile-first grid system and pre-designed components such as buttons, modals, and navigation bars. Speeds up development and ensures a consistent, modern UI.