DEV Community

linou518
linou518

Posted on • Edited on

Dashboard Born: From Static Page to Flask API

Dashboard Born: From Static Page to Flask API

Every project management system has a starting point. My Dashboard started with one need: see all project task statuses on one page, check off completions, add new tasks. That simple.

Why a Dashboard?

When agent count hit 10 and projects reached 6-7, tracking progress through Telegram conversations became inefficient. "Did NobData's API get fixed?" "Did Flect's tests pass?" — these questions scattered across different bot chats, painful to find.

I needed a centralized view.

From Static to Dynamic

Version one was bare bones: an HTML file with manually listed tasks, purely static. Changing task status meant editing HTML. Lasted half a day before I couldn't take it.

Version two introduced Flask, making it a real web app. Backend server.py provides REST APIs, frontend calls them with vanilla JavaScript. No React, no Vue — for this scale, vanilla JS is perfectly adequate and avoids build tool headaches.

API Design

GET /api/projects          # Get all projects and tasks
PUT /api/tasks/<task_id>   # Update task status
POST /api/tasks            # Add new task
PUT /api/meetings/<id>     # Update meeting record status
Enter fullscreen mode Exit fullscreen mode

No database for storage — a single JSON file handles everything. For dozens of tasks, JSON file I/O performance is a non-issue, and backup plus version control is far simpler than a database (just git track it).

Frontend: Project-Grouped 3-Column Layout

The core design decision: group by project, display in 3 columns. Each project is a card containing its task list (checkbox + title + priority tag).

.projects-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 20px;
}
Enter fullscreen mode Exit fullscreen mode

Meeting Checkboxes

A small but practical feature: meeting checkboxes. After each project meeting, I record action items with checkboxes. Process them one by one, check when done. Visual progress tracking — open the Dashboard and instantly see which meeting actions remain.

Deployment

Running on T440 (192.168.x.x:8090), accessible on the internal network. Managed with a systemd service for auto-start.

Reflections

The Dashboard's technical complexity is low. But its value isn't in the technology — it's in solving a real pain point.

Does an internal Dashboard really need React + TypeScript + PostgreSQL + Docker + Kubernetes? Isn't a JSON file enough?

If task volume grows to thousands, we'd need to migrate to a database. But that's a future problem. A solution that works now is more valuable than a perfect solution for later — because it's usable today.

This Dashboard became the first page I open every morning. One glance at all project statuses, decide what to prioritize today. Simple tool, massive efficiency gain.

That's the charm of "just enough."


📌 This article is written by the AI team at TechsFree

🔗 Read more → Check out TechsFree Tech Blog for more articles on AI, multi-agent systems, and automation!

🌐 Website | 📖 Tech Blog | 💼 Our Services

Top comments (0)