No description
  • Makefile 91.7%
  • Dockerfile 8.3%
Find a file
Ryan Grippeling bc5b4dc098
All checks were successful
[Workflow] On Documentation Change / techdocs (push) Successful in 21s
[Workflow] On Documentation Change / Generate (push) Successful in 0s
[Workflow] On Documentation Change / Build (Zensical) + sync to Garage web (push) Successful in 24s
[Workflow] On Documentation Change / Deploy (docs site / Garage web) (push) Successful in 0s
feat(docs): publish to own docs-invoiceninja-application bucket (estate #2)
Repo-scoped Garage key via repo-level TECHDOCS_S3_* (shadows org). The
shared docs-site prefix stops receiving updates; the docs domain routes
/invoiceninja-application to the new bucket in homelab's phase C cutover.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-12 17:47:07 +02:00
.forgejo/workflows feat(docs): publish to own docs-invoiceninja-application bucket (estate #2) 2026-08-12 17:47:07 +02:00
.github chore(docs): retire GitHub-side docs workflows — Forgejo publishes to docs.webgrip.dev (ADR-0052) 2026-08-11 11:04:17 +02:00
.vscode Initial commit 2025-09-03 02:39:53 +00:00
docs feat(docs): flip strict link validation on — links verified clean (estate item #17) 2026-08-12 15:18:05 +02:00
ops fix: deploy 2025-11-23 14:11:09 +01:00
src chore(docker): set up docker 2025-09-03 11:27:25 +02:00
tests Initial commit 2025-09-03 02:39:53 +00:00
.dockerignore Initial commit 2025-09-03 02:39:53 +00:00
.editorconfig Initial commit 2025-09-03 02:39:53 +00:00
.env.example fix: deploy 2025-09-06 08:38:46 +02:00
.gitignore Initial commit 2025-09-03 02:39:53 +00:00
.releaserc.js fix: put back in the npm stuff and removed writerOpts 2025-11-23 21:13:36 +01:00
age.pubkey feat: Initial release 2025-09-04 13:50:22 +02:00
AGENTS.md refactor: Updated AGENTS.md with new version 2025-11-23 23:07:31 +01:00
catalog-info.yml chore(init): personalize invoiceninja-application 2025-09-03 02:40:28 +00:00
CHANGELOG.md chore(release): 1.0.74 2025-11-23 20:15:21 +00:00
docker-compose.yml feat: Initial release 2025-09-04 13:50:22 +02:00
LICENSE Initial commit 2025-09-03 02:39:53 +00:00
Makefile fix: Added proper encrypted file 2025-09-04 13:58:22 +02:00
package.json chore(release): 1.0.74 2025-11-23 20:15:21 +00:00
README.md docs: .releaserc.js instead of json 2025-11-23 14:01:46 +01:00
renovate.json Add renovate.json (#36) 2026-02-13 07:15:43 +01:00

invoiceninja-application

Badges

Template Sync License Conventional Commits SemVer Dockerized PRs Welcome

Opinionated application template focused on repeatable quality: tested workflows, semantic releases, and automatic template drift correction.


At a Glance

Aspect What You Get
CI/CD GitHub Actions pipelines & template sync
Consistency Automatic sync of core config & workflow files to app repos (optin via topic)
Quality Conventional Commits + Semantic Versioning scaffolding
Documentation TechDocs-ready structure for internal/platform portals
Security Encrypted secrets handling via SOPS + age
Developer UX Pre-configured editor & workflow automation

Features

  • Automated template file synchronization (optin per repo by GitHub topic)
  • Semantic release readiness (.releaserc.js included)
  • Encrypted secrets workflow (age / SOPS)
  • Curated GitHub workflow set (docs changes, source changes)
  • Opinionated baseline configs: EditorConfig, VSCode settings, .gitignore
  • Structured test categories (unit, integration, functional, contract, e2e, smoke, performance, behavioral)

Description

Foundation repository for bootstrapping internal / external application services with consistent engineering guardrails. Replace the placeholder service specifics with your domain logic while retaining the shared operational workflows.

Template Synchronization

This repository serves as a template that can automatically sync certain files to application repositories. To enable template sync for your application repository, add the application topic to your repository.

Synced Files Include:

Category Files
Workflows .github/workflows/*.yml (selected core automation)
Config .editorconfig, .gitignore, .releaserc.js
Dev UX .vscode/settings.json

These represent the "source of truth"; local divergent changes in target repos will be overwritten (review PRs carefully).

For detailed information, see the Template Sync Documentation.

Getting Started

Encrypted secrets

make init-encrypt

Creates:

  • age.agekey → add to repo secret SOPS_AGE_KEY
  • age.pubkey → used for encryption

Add plaintext secrets to:

ops/secrets/invoiceninja-application-secrets/values.dec.yaml

Encrypt them:

make encrypt-secrets SECRETS_DIR=./ops/secrets/invoiceninja-application-secrets

This produces values.sops.yaml (commit this).


Docker

The application uses a complete multi-service Docker architecture with self-maintained images and containerization best practices.

Quick Start

# Start all services
make start

# Verify services are healthy
docker compose ps

# Check application
curl http://localhost:8080/
curl http://localhost:8080/health

# Stop services
make stop

Architecture

  • Application: Invoice Ninja 5.x (Laravel-based invoicing platform)
  • Nginx: Reverse proxy with SSL termination (only external port)
  • MariaDB: Primary database (11.6.2) with UTF8MB4 support
  • Redis: Caching and session storage (7.4.2)
  • PostgreSQL: Alternative database option (17.2, disabled by default)
  • mkcert: Local SSL certificate generation

Key Features

  • Self-maintained images: All services use webgrip/invoiceninja-application.{service} naming
  • Security: Non-root users, internal networking, comprehensive health checks
  • Minimal overlay: Only essential additions to upstream images
  • Port hygiene: Only nginx publishes to host (127.0.0.1:8080)
  • Reproducibility: Clean clone → make start → working stack

For detailed Docker documentation, see Docker Infrastructure.


Contributing

Contributions welcome! Please:

  1. Open an issue describing the change
  2. Use Conventional Commits for branch + commit messages
  3. Add / adjust tests where behavior changes
  4. Update docs (README / TechDocs / ADRs) when altering architecture

Roadmap (Excerpt)

  • Add coverage reporting & badge
  • Introduce example service code scaffolding
  • Provide k6 performance test harness
  • Optional Terraform module integration

License

Distributed under the terms of the MIT license. See LICENSE for details.