Gridlink App
Overview
Gridlink is an internal dashboard for Gridlink Research, a digital marketing company serving medical practices. It tracks clients, leads, cases (patient pipeline), campaigns, and integrates with external platforms like GoHighLevel.
Architecture
┌──────────────┐ ┌──────────────┐ ┌──────────┐
│ Browser │────▶│ Nginx │────▶│ Next.js │
│ │ │ (port 80) │ │ (port │
│ │ │ │──┐ │ 3000) │
└──────────────┘ └──────────────┘ │ └──────────┘
│
▼
┌──────────┐ ┌──────────┐
│ Flask │────▶│ SQLite │
│ API │ │ DB │
│ (port │ └──────────┘
│ 5000) │
└──────────┘
/opt/gridlink/data/gridlink.db)/api/* to Flask, everything else to Next.js10.222.222.88 (Ubuntu 22.04)Tech Stack
| Layer | Technology | Version |
|---|---|---|
| Frontend Framework | Next.js (App Router) | 16.2.6 |
| UI Styling | Tailwind CSS | 4.x |
| Charts | ApexCharts / react-apexcharts | 3.x |
| Backend Framework | Flask | 3.1.1 |
| WSGI Server | Gunicorn | 23.0.0 |
| Database | SQLite | 3.x (WAL mode) |
| Runtime | Node.js 20 / Python 3.10 | — |
| Process Manager | systemd | — |
| Reverse Proxy | Nginx | 1.18 |
Directory Structure
/opt/gridlink/
├── frontend/ # Next.js app
│ ├── src/
│ │ ├── app/ # Pages (App Router)
│ │ ├── components/# React components
│ │ └── lib/ # API client, utilities
│ └── .env.local # Environment config
├── backend/ # Flask API
│ ├── api.py # Route handlers
│ ├── models.py # Database models + helpers
│ └── venv/ # Python virtualenv
└── data/
└── gridlink.db # SQLite database
Services
| Service | Unit File | Port | Description |
|---|---|---|---|
gridlink-api | /etc/systemd/system/gridlink-api.service | 5000 | Flask API via Gunicorn |
gridlink-web | /etc/systemd/system/gridlink-web.service | 3000 | Next.js frontend |
nginx | system default | 80 | Reverse proxy |
Common Commands
# Check status
systemctl status gridlink-api gridlink-web
Restart after code changes
systemctl restart gridlink-api # Backend changes
cd /opt/gridlink/frontend && npm run build && systemctl restart gridlink-web # Frontend changes
View logs
journalctl -u gridlink-api -f
journalctl -u gridlink-web -f
Data Model
The app uses a relational data model centered around the medical marketing workflow:
See the Data Dictionary for full schema details.
Component System
Gridlink uses a component architecture for external integrations. Each component:
Currently planned components:
Deployment
The app runs on a dedicated VM (10.222.222.88). To deploy changes:
/opt/gridlink/systemctl restart gridlink-apicd /opt/gridlink/frontend && npm run build && systemctl restart gridlink-webNo containerization currently — systemd manages the processes directly.
Conventions
/api/.In this section
Last updated: 5/26/2026