Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
62 commits
Select commit Hold shift + click to select a range
fc18b2f
chore(scripts): update grafana datasource
Lftobs Jun 9, 2026
ebf0409
refactor(infra): improve monitoring and
Lftobs Jun 16, 2026
ffdceb5
chore: add issue templates, PR template, and
Lftobs Jun 16, 2026
fb2e810
chore: simplify issue templates
Lftobs Jun 16, 2026
b4dda9e
feat(monitoring): implement automatic project
Lftobs Jun 17, 2026
5674aee
fix(orchestrator): improve container network
Lftobs Jun 19, 2026
7697084
chore: bump version to 0.1.1
Lftobs Jun 19, 2026
d94e9ba
Merge pull request #13 from Lftobs/fix/bugs
Lftobs Jun 19, 2026
e2bc802
Merge branch 'dev' into feat/workflow
Lftobs Jun 19, 2026
3a6372e
ci(release): extract version-specific notes for
Lftobs Jun 19, 2026
78cded2
Merge pull request #14 from Lftobs/feat/workflow
Lftobs Jun 19, 2026
a0aa7c0
chore(scripts): improve shell compatibility in
Lftobs Jun 20, 2026
7276cee
Merge branch 'dev' of github.com:Lftobs/dequel into dev
Lftobs Jun 20, 2026
5c1f61b
Merge pull request #15 from Lftobs/fix/hot-fix
Lftobs Jun 20, 2026
a6c69bc
feat(api): add PAM auth and token utilities
Lftobs Jun 22, 2026
caf25f2
refactor(api): switch PAM auth to HTTP service
Lftobs Jun 23, 2026
afc28aa
refactor(auth): add timeout and libc fixes
Lftobs Jun 27, 2026
6e50502
Merge branch 'dev' into feat/auto-scaling
Lftobs Jun 27, 2026
cac7554
Merge pull request #16 from Lftobs/feat/auto-scaling
Lftobs Jun 27, 2026
295178d
feat(deploy): support specific commit deployments
Lftobs Jul 2, 2026
210f9df
Merge branch 'feat/auto-scaling' of github.com:Lftobs/dequel into fea…
Lftobs Jul 2, 2026
594916d
Merge branch 'dev' into feat/auto-scaling
Lftobs Jul 4, 2026
ef3fd36
feat(api): add drizzle migrations and deploy UI
Lftobs Jul 4, 2026
ffb2557
feat(deployments): add ClearCacheToggle UI
Lftobs Jul 4, 2026
765203a
Merge branch 'feat/auto-scaling' of github.com:Lftobs/dequel into fea…
Lftobs Jul 4, 2026
5c49ed9
fix: robust migration and UI log tweaks
Lftobs Jul 11, 2026
b21922e
Merge pull request #17 from Lftobs/feat/auto-scaling
Lftobs Jul 12, 2026
894a135
Refactor(grafana): overhaul dashboards and logging
Lftobs Jul 12, 2026
0a56270
fix(api): fix project deletion
Lftobs Jul 12, 2026
f87ee8b
refactor(docs): reorder docs menu and polish UI
Lftobs Jul 13, 2026
9ea0848
chore: pending changelog for v0.2.0
Lftobs Jul 13, 2026
b30ed40
Merge branch 'dev' into feat/auto-scaling
Lftobs Jul 13, 2026
f5162f9
Delete .tegami/2026-07-13-changes-since-v0.1.1.md
Lftobs Jul 13, 2026
8501dd3
feat(orchestrator): implement cleanup system for
Lftobs Jul 14, 2026
3b73df9
feat(web): add mobile-responsive navigation and
Lftobs Jul 15, 2026
dfb54e5
feat(api): simplify repository fetching to owner
Lftobs Jul 15, 2026
e6d0e69
feat(scripts): implement update cmd for dequel
Lftobs Jul 15, 2026
1536a4f
Merge pull request #18 from Lftobs/feat/auto-scaling
Lftobs Jul 15, 2026
052b3ab
feat(orchestrator): implement cleanup system for
Lftobs Jul 14, 2026
b9d0a96
feat(web): add mobile-responsive navigation and
Lftobs Jul 15, 2026
a3037ad
feat(api): simplify repository fetching to owner
Lftobs Jul 15, 2026
875eabd
feat(scripts): implement update cmd for dequel
Lftobs Jul 15, 2026
d9bbe74
Merge branch 'dev' into feat/git-autodeploy
Lftobs Jul 15, 2026
e925856
Merge branch 'feat/git-autodeploy' of github.com:Lftobs/dequel into f…
Lftobs Jul 15, 2026
15a8b9b
feat: improve auth, GitHub integration, and
Lftobs Jul 17, 2026
b2dbd88
chore(docker): switch to remote images for api and
Lftobs Jul 17, 2026
6d4af96
Merge pull request #19 from Lftobs/feat/git-autodeploy
Lftobs Jul 17, 2026
299a8b9
chore(release): v0.2.0
Lftobs Jul 17, 2026
309df3c
docs: update v0.2.0 changelog details
Lftobs Jul 17, 2026
66bd9f5
chore(scripts): dynamic previous tag resolution in
Lftobs Jul 17, 2026
4cf6f28
chore(release): add tag release plugin to
Lftobs Jul 17, 2026
05de3fa
chore(release): add release script and remove
Lftobs Jul 17, 2026
9c4203a
fix(release): resolve dequel update collisions, auth script downloads…
Lftobs Jul 17, 2026
4ae6d2c
Merge pull request #25 from Lftobs/bump
Lftobs Jul 17, 2026
ba09dda
Merge branch 'feat/git-autodeploy' into dev
Lftobs Jul 17, 2026
13c73d0
fix(release): configure GRAFANA_URL with subpath for api service
Lftobs Jul 17, 2026
453e627
fix(web): resolve Ko-fi popup viewport clipping and overflow in sidebar
Lftobs Jul 17, 2026
bbaaf9c
docs: add v0.1.1 and v0.2.0 to changelog
Lftobs Jul 18, 2026
37f7f39
docs: dynamic changelog from content collection
Lftobs Jul 18, 2026
98fe1fc
docs: dynamic changelog from content collection
Lftobs Jul 18, 2026
6c3acc7
refactor(docs): migrate changelog to content
Lftobs Jul 18, 2026
915d9bb
Merge pull request #26 from Lftobs/bugs
Lftobs Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
.git
.gitignore
.gitattributes
AGENTS.md
CHANGELOG.md
CONTRIBUTING.md
VERSION
*.md
node_modules
apps/web
apps/docs
data
workspace
infra
dist
.env
__pycache__
*.log
docker-compose.yml
CLI.md
53 changes: 53 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
---
name: Bug Report
about: Report a bug to help us improve Dequel
title: "[Bug]: "
labels: bug, triage
assignees: ""
---

## Description

A clear and concise description of what the bug is.

## Steps to Reproduce

1. Go to '...'
2. Click on '...'
3. Scroll down to '...'
4. See error

## Expected Behavior

What did you expect to happen?

## Actual Behavior

What actually happened?

## Screenshots / Logs

If applicable, add screenshots or relevant logs.

## Environment

- **Dequel Version**: (check `VERSION` or `scripts/dequel status`)
- **OS**:
- **Docker version**:
- **Bun version** (if relevant):
- **Browser** (if relevant):

## Affected Component

- [ ] API (Backend)
- [ ] Web Dashboard (Frontend)
- [ ] Docs
- [ ] CLI / Install Script
- [ ] Docker / Deployment
- [ ] Build System (Railpack / BuildKit)
- [ ] Caddy / Ingress
- [ ] Monitoring (Prometheus / Grafana / Loki)

## Additional Context

Add any other context, workarounds, or related issues.
41 changes: 41 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
---
name: Feature Request
about: Suggest an idea for Dequel
title: "[Feature]: "
labels: enhancement
assignees: ""
---

## Problem Statement

Is your feature request related to a problem? Please describe what you're trying to solve.

## Proposed Solution

A clear and concise description of what you want to happen.

## Alternative Solutions

Any alternative solutions or features you've considered.

## Affected Component

- [ ] API (Backend)
- [ ] Web Dashboard (Frontend)
- [ ] Docs
- [ ] CLI / Install Script
- [ ] Build System (Railpack / BuildKit)
- [ ] Caddy / Ingress
- [ ] Monitoring (Prometheus / Grafana / Loki)

## Mockups / Examples

If applicable, add mockups, diagrams, or examples from other projects.

## Additional Context

Add any other context or screenshots.

## Would you like to implement this?

- [ ] Yes, I'd be happy to submit a PR
43 changes: 43 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
## Description

Please provide a summary of the changes and the motivation behind them. What problem does this PR solve?

Fixes #(issue)

## Type of Change

- [ ] Bug fix (non-breaking change that fixes an issue)
- [ ] New feature (non-breaking change that adds functionality)
- [ ] Breaking change (fix or feature that would cause existing functionality to not work as expected)
- [ ] Documentation update
- [ ] Refactor (no functional changes)
- [ ] CI / Build / Tooling
- [ ] Other (please describe):

## How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce.

- [ ] Existing tests pass (`bun test` in `apps/api/`)
- [ ] New tests added (if applicable)
- [ ] Manual testing performed (describe steps)

## Checklist

- [ ] My code follows the project's code style (no comments, named exports, functional components, etc.)
- [ ] I have read the [contributing guidelines](../CONTRIBUTING.md)
- [ ] I have added tests that prove my fix is effective or that my feature works
- [ ] I have updated the documentation (if applicable)
- [ ] My changes generate no new warnings or lint errors
- [ ] I have run `bun test` in `apps/api/` and all tests pass
- [ ] I have synced the VERSION file if needed (`bun run sync-versions`)

## Screenshots (if applicable)

| Before | After |
|--------|-------|
| (insert here) | (insert here) |

## Additional Context

Add any other context about the PR here (e.g., migration notes, deployment considerations, rollback strategy).
18 changes: 12 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,8 @@ jobs:
with:
context: apps/web
push: true
build-args: |
DEQUEL_VERSION=${{ steps.version.outputs.VERSION }}
tags: |
${{ env.WEB_IMAGE }}:${{ steps.version.outputs.VERSION }}
${{ env.WEB_IMAGE }}:latest
Expand All @@ -71,18 +73,22 @@ jobs:
cp docker-compose.yml "$TAR_DIR/"
cp scripts/dequel "$TAR_DIR/dequel"
cp infra/caddy/Caddyfile "$TAR_DIR/infra/caddy/"
cp infra/monitoring/prometheus.yml "$TAR_DIR/infra/monitoring/"
cp infra/monitoring/loki-config.yml "$TAR_DIR/infra/monitoring/"
cp infra/monitoring/promtail-config.yml "$TAR_DIR/infra/monitoring/"
cp infra/monitoring/grafana/datasources/loki.yml "$TAR_DIR/infra/monitoring/grafana/datasources/"
cp infra/monitoring/grafana/datasources/prometheus.yml "$TAR_DIR/infra/monitoring/grafana/datasources/"
cp -r infra/monitoring "$TAR_DIR/infra/"
cd "$TAR_DIR" && tar -czf "../dequel-config-${VERSION}.tar.gz" .

- name: Extract changelog entry for this version
run: |
VERSION="${{ steps.version.outputs.VERSION }}"
awk '/^## \['"$VERSION"'\] -/{flag=1; next} /^## \[/{if(flag) exit} flag' CHANGELOG.md > release-notes.md
if [ ! -s release-notes.md ]; then
echo "No changelog entry for v$VERSION, will use auto-generated notes"
fi

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: v${{ steps.version.outputs.VERSION }}
body_path: CHANGELOG.md
body_path: release-notes.md
generate_release_notes: true
files: |
scripts/install.sh
Expand Down
50 changes: 50 additions & 0 deletions .github/workflows/vuln-scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Security Scans

on:
push:
pull_request:
workflow_dispatch:

concurrency:
group: security-scans-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read
pull-requests: read

jobs:
forbidden-pattern-scan:
name: Forbidden Pattern Scan
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
persist-credentials: false

- name: Run forbidden pattern scan
run: bash scripts/workflow/forbidden-pattern-scan.sh "${{ github.workspace }}"

lazarus-scanner:
name: Lazarus Scanner
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5
with:
persist-credentials: false

- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.12"

- name: Download lazarus_scanner.py
run: |
curl -fsSL -o lazarus_scanner.py \
https://raw.githubusercontent.com/hngprojects/lazarus-scanner/b1367e3a7a1463fbef90919867555a73f6acdf66/lazarus_scanner.py
echo "ddbb2181479f9a07d5859ceeac9160fd45084d28d95311ce49fc63fc1959e831 lazarus_scanner.py" | sha256sum --check || { echo "FAIL: SHA256 mismatch"; exit 1; }

- name: Run Lazarus scanner
run: python3 lazarus_scanner.py
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,7 @@ infra/caddy/routes/
bugs
apps/api/index
docker-compose.yml
bump.sh
scripts/workflow/bump.sh
__pycache__
.tegami/changes-*
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,31 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [0.1.1] - 2026-06-19

### Added

- Per-project Grafana dashboards automatically created on successful deployment
- Configurable `CADDY_BASE_DOMAIN` for public ingress with automatic Let's Encrypt SSL
- Dynamic `railpack.json` generation with deployment abort support
- GitHub webhook management and project management API endpoints
- Project source and port configuration options
- SMTP configuration and system settings API

### Changed

- Monitoring stack hardened: Prometheus now validates TSDB blocks and quarantines corrupted ones on startup; Promtail scoped to `dequel_net` network; Grafana datasources use stable UIDs for reliable dashboard provisioning
- `PUBLIC_URL` is now derived from `CADDY_BASE_DOMAIN` instead of requiring separate configuration
- Refactored infrastructure monitoring configs into dedicated files for maintainability

### Fixed

- Container network reconciliation now force-disconnects stale network references before starting containers, preventing Docker network ID changes from breaking deployments

### Documentation

- Installation guide, quickstart, and system configuration docs updated for `CADDY_BASE_DOMAIN`

## [0.1.0] - 2026-06-08

### Added
Expand Down
107 changes: 107 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
# Contributing to Dequel

Thank you for your interest in contributing! Here's how to get started.

## Getting Started

1. Fork and clone the repo
2. Install dependencies: `bun install` (from repo root — needed for tests, version syncing, and local tooling)
3. Read [`AGENTS.md`](./AGENTS.md) for the full architecture and conventions

## Reporting Bugs

Open a [Bug Report](https://github.com/Lftobs/dequel/issues/new?template=bug_report.md). Include:

- Steps to reproduce
- Expected vs actual behavior
- Dequel version (`VERSION` file or `scripts/dequel status`)
- Environment details (OS, Docker version, browser if relevant)

## Suggesting Features

Open a [Feature Request](https://github.com/Lftobs/dequel/issues/new?template=feature_request.md). Describe:

- The problem you're solving
- Your proposed solution
- Any alternatives considered
- Whether you'd like to implement it yourself

## Development

### Running Locally

Run the full stack with Docker Compose:

```bash
docker compose up -d --build
```

This starts all services (API, Web, Caddy, BuildKit, Redis, Prometheus, Loki, Grafana). The dashboard is at `https://localhost`, API at `https://localhost/api`, Grafana at `https://localhost/grafana` (admin/admin).

### Code Conventions

- **No comments** in source code unless absolutely necessary
- **Named exports** over default exports
- **Functional components + hooks** in React
- **Tailwind CSS** for styling (web and docs)
- Max ~500 lines per file — split into feature-grouped directories
- `set -euo pipefail` in all bash scripts

### Database Migrations

Run from `apps/api/`:

```bash
cd apps/api
bunx drizzle-kit generate
bunx drizzle-kit push
```

### Testing

Run from `apps/api/`:

```bash
cd apps/api && bun test
```

Always run tests before committing API changes.

### Versioning

```bash
./bump.sh v0.2.0
```

This updates `VERSION`, all `package.json` files, and optionally adds a changelog entry.

## Pull Requests

1. Create a PR from your fork using the [PR template](./.github/PULL_REQUEST_TEMPLATE.md)
2. Ensure all tests pass (`cd apps/api && bun test`)
3. Keep changes focused — one feature/fix per PR
4. Update documentation if your change affects user-facing behavior
5. If changing API behavior, update the docs site content

### PR Checklist

- [ ] Tests pass (`cd apps/api && bun test`)
- [ ] No new warnings or lint errors
- [ ] Documentation updated (if applicable)
- [ ] Version synced (`bun run sync-versions`) if `VERSION` changed
- [ ] Follows code conventions (no comments, named exports, etc.)

## Release Process

Maintainers cut releases by tagging:

```bash
git tag vX.Y.Z
git push origin vX.Y.Z
```

CI builds Docker images to `ghcr.io/lftobs/dequel/{api,web}:X.Y.Z`, deploys docs to Vercel, and creates a GitHub Release.

## Questions?

Open a [Discussion](https://github.com/Lftobs/dequel/discussions) for questions and community support.
Loading
Loading