# Show HN: SparQ Pulse – Self-hosted, GitHub-native project management

> Source: <https://github.com/gosparQ/sparq>
> Published: 2026-06-24 17:53:03+00:00

**The first fully open-source Developer Experience suite for GitHub-native teams**

[Changelog](/gosparq/sparq/blob/master/CHANGELOG.md) ·
[Contributing](/gosparq/sparq/blob/master/CONTRIBUTING.md) ·
[Security](/gosparq/sparq/blob/master/SECURITY.md)

[
](/gosparq/sparq/blob/master/.github/assets/screenshot.png)

Dashboard: team pulse, blockers, and activity at a glance

sparQ is the first fully open-source Developer Experience suite for GitHub-native teams. It's a set of focused products that share one self-hosted home. Start with Pulse today, with Metrics and Knowledge on the way.

| Product | Description | Status |
|---|---|---|
Pulse |
GitHub-native project management, async standups, team presence, and delivery visibility | Available |
Metrics |
DORA metrics and engineering analytics | Coming soon |
Knowledge |
LLM-powered knowledge base from your codebase | Coming soon |

GitHub-native project management, async standups, team presence, and delivery visibility for teams living in GitHub. Self-hosting is always free. Forever.

**Runs on SQLite out of the box. Zero external dependencies.**

**GitHub Sync**— Projects, tasks, and status derived from PRs, issues, and commits** Async Standups**— Template-driven daily check-ins with audio recording and transcription** Blockers Board**— Track blockers with owners, urgency tiers, and automatic nudges** Presence**— See who's available, focused, blocked, or out across the team** Action Items**— Three-tier urgency system (Now / Later / Whenever), weekly plans** Chat & DMs**— Real-time messaging with channels, direct messages, and reactions** Documents**— Notes, e-signatures with audit trail, knowledge base** People**— Directory, onboarding, 1-on-1s, hiring pipeline** Time & Attendance**— Clock in/out, PTO requests, schedules, punch corrections** AI Assistant**— Optional LLM-powered features (OpenAI or Anthropic)** Mobile API**— Full REST API with JWT auth** Multi-language**— Built-in i18n with installable language packs

```
git clone https://github.com/sparqsoft/sparq.git
cd sparq
docker compose up
```

Open [http://localhost:8000](http://localhost:8000) to get started.

Requires Python 3.13+ and [uv](https://docs.astral.sh/uv/).

```
git clone https://github.com/sparqsoft/sparq.git
cd sparq/pulse
make venv
source venv/bin/activate
make run
```

Open [http://localhost:8000](http://localhost:8000).

By default sparQ uses SQLite (zero-config). To use PostgreSQL, set `DATABASE_URL`

in your `.env`

:

```
DATABASE_URL=postgresql://sparq:sparq@localhost:5432/sparq
```

Then start a Postgres container and run:

```
cd pulse
make db-start
make run
```

Copy `.env.example`

to `.env`

in the `pulse/`

directory. The app auto-generates one on first run if missing.

Key settings:

| Variable | Default | Description |
|---|---|---|
`SECRET_KEY` |
Auto-generated | Flask session secret |
`DATABASE_URL` |
SQLite (`data/sparq.db` ) |
Database connection string |
`FLASK_DEBUG` |
`false` |
Enable debug mode |
`LLM_PROVIDER` |
`openai` |
AI provider (`openai` or `anthropic` ) |
`OPENAI_API_KEY` |
-- | Required for AI features |
`MSA_USER` |
-- | Admin panel username (disabled if unset) |
`MSA_PASS` |
-- | Admin panel password (disabled if unset) |

See [ pulse/.env.example](/gosparq/sparq/blob/master/pulse/.env.example) for the full list.

sparQ includes a built-in admin console at `/msa`

for managing organizations, workspaces, and users. It is **disabled by default**. Set both `MSA_USER`

and `MSA_PASS`

in your `.env`

to enable it.

sparQ sends transactional emails for signups, password resets, and magic link logins. Configure email from the admin panel or via environment variables.

**Option 1: Admin Panel (recommended)**

- Enable the MSA admin panel (set
`MSA_USER`

and`MSA_PASS`

) - Navigate to
`/msa/email`

- Select a provider (Gmail, Microsoft 365, SendGrid, Mailgun, AWS SES, or custom SMTP)
- Enter your credentials and click
**Save Configuration** - Use
**Test Connection** and**Send Test Email** to verify

**Option 2: Environment Variables**

Set these in your `.env`

to configure email without the admin panel:

| Variable | Description |
|---|---|
`SMTP_HOST` |
SMTP server hostname (e.g., `smtp.gmail.com` ) |
`SMTP_PORT` |
SMTP port (default: `587` ) |
`SMTP_USERNAME` |
SMTP username or email address |
`SMTP_PASSWORD` |
SMTP password or app-specific password |
`SMTP_FROM_EMAIL` |
Sender email address |
`SMTP_PROVIDER` |
Provider name (e.g., `gmail` , `sendgrid` , `custom` ) |

Environment variables take priority over admin panel settings. Fields locked by env vars are shown with a lock icon in the admin panel.

Gmail users:Enable 2-Step Verification, then generate an[App Password]. Use the 16-character app password, not your regular password.

If no email provider is configured, signup falls back to direct password-based registration (no email confirmation).

sparQ syncs tasks and blockers with GitHub Issues. Connect using a classic Personal Access Token (PAT):

- Go to
[GitHub → Settings → Developer settings → Personal access tokens → Tokens (classic)](https://github.com/settings/tokens/new) - Create a new token with these scopes:
`repo`

and`admin:repo_hook`

- In sparQ, go to
**Settings → Integrations** and paste your token and repository (`owner/repo`

) - Open
**Settings → Integrations → GitHub → Match GitHub people** and map each GitHub account to a sparQ member, so commit and PR activity is attributed to the right person (unmapped accounts are skipped). Members can also self-map in their own settings.

That's it. Issues, labels, and assignees sync between sparQ and your repository, and commits and pull requests show up in the **Status** feed as each person's current activity.

Self-hosting behind a reverse proxy?Set`GITHUB_WEBHOOK_BASE_URL`

to your public URL (e.g.`https://app.example.com`

) so the auto-registered webhook resolves correctly, and set`GITHUB_WEBHOOK_SECRET`

to verify inbound webhooks (required in production).

```
sparq/
├── pulse/                  # Main application (sparQ Pulse)
│   ├── app.py              # Application factory
│   ├── modules/            # Feature modules (core, updates, presence, etc.)
│   ├── system/             # Framework (db, auth, email, middleware, etc.)
│   ├── tests/              # Unit, integration, and e2e tests
│   ├── Makefile            # Dev commands (make run, make venv, etc.)
│   └── requirements.in     # Python dependencies
├── metrics/                # (coming soon)
├── knowledge/              # (coming soon)
└── docker-compose.yml
```

**Backend**: Python, Flask, SQLAlchemy, Flask-SocketIO** Database**: SQLite (default) or PostgreSQL** Frontend**: Server-rendered Jinja2 templates, HTMX** Real-time**: WebSocket via Flask-SocketIO** Production**: Gunicorn

```
cd pulse

# Run tests
python -m pytest tests/

# Reset database
make reset

# Verbose startup (shows module loading)
make run V=1
```

We welcome contributions! Please read our [Contributing Guide](/gosparq/sparq/blob/master/CONTRIBUTING.md) to get started.

If you find a security vulnerability, please follow our [Security Policy](/gosparq/sparq/blob/master/SECURITY.md) instead of filing a public issue.

This project is licensed under the [GNU Affero General Public License v3.0](/gosparq/sparq/blob/master/LICENSE).

Copyright (c) 2025-2026 sparQ Software LLC.
