View
Generate
Download
App
Pactown - Executable Markdown SaaS Platform
AI Cost Tracking
- 🤖 LLM usage: $2.9123 (210 commits)
- 👤 Human dev: ~$11892 (118.9h @ $100/h, 30min dedup)
Generated on 2026-05-20 using openrouter/qwen/qwen3-coder-next
Deploy URL: [app]{sep}[username].DOMAIN (domyślnie sep = -, np. 3-tom-sapletta-com.pactown.com)
Platforma SaaS umożliwiająca użytkownikom tworzenie i uruchamianie aplikacji poprzez edytor Markdown z integracją LLM (OpenRouter) i płatnościami.
Quick Start
# 1. Sklonuj repo
git clone https://github.com/wronai/pactown-com.git
cd pactown-com
# 2. Skonfiguruj środowisko
make config
# 3. Zainstaluj na serwerze VPS (Podman + Quadlet)
make install
# 4. Zainicjalizuj Traefik i środowisko
make quadlet-init
# 5. Uruchom wszystkie serwisy
make up
# 6. Sprawdź status
make status
Wymagania Serwera
- VPS: 8GB RAM, 8 vCPU (np. Hetzner CX31 ~€17/msc)
- OS: Ubuntu 22.04/24.04 lub Fedora 39+
- Domena: pactown.com z wildcard DNS (
*.pactown.com) - Porty: 80, 443
Dlaczego Podman Quadlet zamiast Docker Swarm?
| Cecha | Docker Swarm | Podman Quadlet |
|---|---|---|
| Daemonless | ❌ Wymaga dockerd | ✅ Bez demona |
| Rootless | ⚠️ Eksperymentalny | ✅ Natywny |
| Systemd integration | ❌ Osobne zarządzanie | ✅ Natywne |
| Security isolation | ⚠️ Shared daemon | ✅ Per-user namespaces |
| Auto-restart | ✅ | ✅ Via systemd |
| Memory footprint | ~100MB daemon | ~0MB (on-demand) |
| Multi-tenant | ⚠️ Labels | ✅ User namespaces |
Pactown wykorzystuje wewnętrzny moduł pactown.deploy.quadlet z pełnym wsparciem dla:
- Sanityzacji nazw, zmiennych, ścieżek (security)
- Generowania Traefik jako Quadlet
- Izolacji tenantów przez user namespaces
- Walidacji volume mounts
Architektura
┌─────────────────────────────────────────────────────────────────┐
│ pactown.com (Traefik Quadlet) │
├─────────────────────────────────────────────────────────────────┤
│ *.pactown.com → Wildcard SSL (Let's Encrypt) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Web │ │ API │ │ Editor │ │ User Apps │ │
│ │ :3000 │ │ :8000 │ │ :3001 │ │ :10000-20000 │ │
│ │ Next.js │ │ FastAPI │ │ TipTap │ │ markpact │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │
│ │ │ │ │ │
│ [Quadlet] [Quadlet] [Quadlet] [Quadlet] │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ systemd user services (rootless containers) │ │
│ └──────────────────────────────────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ PostgreSQL + Redis (Quadlet) │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Ważne elementy implementacji:
- [Auth (sesja)]
access_tokenjako httpOnly cookie (token nie jest przekazywany w URL i nie jest trzymany wlocalStorage). - [Runner status realtime] Dashboard korzysta z SSE (
GET /runner/status/stream) zamiast polling. - [Admin auth]
admin_tokenjako httpOnly cookie.
Struktura Projektu
pactown-com/
├── Makefile # Wszystkie komendy (make quadlet-*)
├── scripts/ # Skrypty wywoływane przez Makefile
│ ├── config.sh # Interaktywna konfiguracja
│ ├── install.sh # Instalacja Podman
│ ├── up.sh # Uruchamianie serwisów
│ ├── dev.sh # Tryb development
│ ├── test.sh # Runner testów
│ └── diag-remote.sh # Diagnostyka produkcji
├── quadlet/ # Pliki jednostek Quadlet
├── .env.example # Template konfiguracji
├── backend/
│ ├── app/
│ │ ├── main.py # FastAPI app
│ │ ├── routers/auth.py # OAuth2 (Google, GitHub)
│ │ ├── config.py # Pydantic Settings
│ │ └── ...
│ └── tests/
├── frontend/
│ ├── src/
│ ├── e2e/ # Testy Playwright
│ │ └── oauth.spec.ts # Testy OAuth
│ └── package.json
├── infra/scripts/ # Skrypty infrastruktury
│ ├── diagnostics.sh # Pełna diagnostyka
│ └── init-quadlet.sh # Inicjalizacja Quadlet
└── docs/ # Dokumentacja
Komendy Makefile
| Komenda | Opis |
|---|---|
make config |
Interaktywna konfiguracja .env |
make install |
Instalacja Podman + zależności |
make dev |
Tryb development (docker-compose) |
make build |
Zbuduj obrazy localhost/pactown-api:latest i localhost/pactown-web:latest |
make pull |
Pobierz obrazy z registry i otaguj jako localhost/* |
make up |
Uruchom produkcję (Quadlet) |
make down |
Zatrzymaj serwisy |
make restart |
Restart wszystkich serwisów |
make status |
Status serwisów |
make logs |
Logi serwisów |
make diag |
Diagnostyka systemu |
make diag-remote |
Diagnostyka produkcji (DNS, SSL) |
make test |
Testy API + frontend |
make test-oauth |
Testy OAuth (Playwright) |
make deploy |
Deploy produkcyjny |
Dokumentacja (repo)
docs/README.md(menu):./docs/README.md- CLI + mapowanie API→shell (curl/make):
./docs/CLI_API.md - Produkcja (VPS): przykłady komend
make/pactowncom:./docs/CLI_API.md#produkcja-vps
Pactown Guard (pactown-guard)
pactown-guard to transparentny guard do diagnostyki VPS: uruchamiasz go ręcznie i dostajesz interaktywny shell.
Szybkie użycie (z repo)
python3 infra/scripts/pactown_guard.py --prod
Po uruchomieniu zobaczysz podsumowanie i prompt:
pactown-guard>
Komendy w shellu
helpPokaż dostępne komendy.diagUruchom ponownie diagnostykę (infra/scripts/diagnostics.sh --json).suggestPokaż propozycje bezpiecznych akcji (bez wykonywania zmian).applyZastosuj proponowane akcje, ale zawsze pyta o potwierdzenie dla każdej z nich.restart <service>Restart pojedynczej usługisystemd --user(tylko z allowlisty; z potwierdzeniem).logs <service>Podejrzyj logijournalctl --user -u <service>.triageOtwórz sesjętmuxz logami (domyślniepactown-triage).exit/quitWyjście.
Instalacja komendy pactown-guard (w PATH)
Po make install instalacja jest robiona automatycznie w trybie editable (pip --user -e .).
Jeśli chcesz to zrobić ręcznie:
pactown-guard install
Aktualizacja pactown-guard
Najprościej:
pactown-guard update
Domyślnie (gdy jesteś w repo) zrobi git pull + reinstalację -e.
Jeśli uruchamiasz poza repo, wykona update z PyPI.
Opcjonalny systemd timer (niezalecane jako domyślne)
Guard jest projektowany jako narzędzie manualne. Jeśli chcesz uruchamiać go okresowo:
make guard-init
make guard-enable-timer
make guard-status
Wyłączenie timera:
make guard-disable
Publikacja paczki (PyPI)
make publish
Wymaga ustawionych poświadczeń (np. TWINE_USERNAME, TWINE_PASSWORD).
Funkcjonalności (v0.1.8)
1. Social Login
- Google OAuth2 → docs/AUTH.md
- GitHub OAuth2 → docs/AUTH.md
- Auth0 (OIDC broker)
- Clerk (opcjonalny)
- Facebook OAuth2 (opcjonalnie)
2. Markdown Editor (TipTap)
- WYSIWYG editing
- Code blocks z syntax highlighting
-
markpact:*codeblocks - Live preview
3. LLM Integration (OpenRouter)
- Generowanie projektów z opisu
- Auto-fix błędów runtime
- Chat z kontekstem projektu
- Wybór modelu LLM
- Darmowe modele (nemotron)
4. Płatności
- Stripe (karty, BLIK via P24)
- Tpay (natywne polskie płatności)
5. User Services
- Dynamiczne tworzenie subdomen
- Konfigurowalny separator subdomen (
SUBDOMAIN_SEPARATOR:-lub.) - Izolacja kontenerów
- Health checks
- SSE real-time runner status
6. Desktop & Mobile Builds
- Electron (AppImage, exe, dmg)
- Tauri, PyInstaller, PyQt
- Capacitor (Android/iOS)
- React Native, Flutter, Kivy
- Build artifacts z retencją (max 3 per scope)
- Download artefaktów z UI
7. Infrastructure as Code (IaC)
-
pactown.sandbox.yaml— specyfikacja runtime -
Dockerfile— gotowy do produkcji -
docker-compose.yaml— single-service compose - Web Preview mode (headless servers)
8. Marketplace / Examples
- DB-backed examples (seed z marketplace.ts)
- 20+ przykładów z kategoriami i tagami
- Build z przykładu online
- Publiczne API: GET /public/examples
9. Internationalization (i18n)
- 7 języków: PL, EN, DE, FR, ES, UK, RU
- Automatyczne wykrywanie locale
- Przełącznik języka w UI
10. Program Poleceń (Referrals)
- Unikalne linki polecające
- Punkty za polecenia
- Wypłata od 100 PLN
11. Diagnostyka / zgłaszanie problemów
- Dashboard: synchronizacja stanu UI z parametrami URL
- Dashboard: ślad działań użytkownika jako token
trace+trace_id - Dashboard: „Zgłoś problem” (modal) ze zrzutem ekranu
- Backend:
POST /users/me/issue-report
Changelog / Roadmap
Konfiguracja DNS
# Dodaj rekordy DNS dla pactown.com:
A @ → <IP_SERWERA>
A * → <IP_SERWERA>
AAAA @ → <IPv6_SERWERA> (opcjonalnie)
AAAA * → <IPv6_SERWERA> (opcjonalnie)
Dokumentacja
| Dokument | Opis |
|---|---|
| docs/AUTH.md | Konfiguracja OAuth (Google, GitHub, Clerk) |
| docs/IMPLEMENTATION.md | Szczegóły implementacji (cookies auth, SSE runner status, proxy, admin/public pages, cache env) |
| docs/CONFIGURATION.md | Pełna konfiguracja .env |
| docs/DEV_SETUP.md | Setup środowiska dev |
| docs/SECURITY.md | Bezpieczeństwo i best practices |
| docs/SERVICE_PROVIDER.md | Wymagania dla providera usług / hostingu (pod skalowanie runnerów) |
| docs/IAC.md | Infrastructure as Code |
Licencja
2026 Softreck. Wszelkie prawa zastrzeżone.
Ostatnia aktualizacja: Luty 2026
License
Licensed under Apache-2.0.
Metadata
Release files for pactown-guard 0.1.9
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pactown_guard-0.1.9.tar.gz | 2.3 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pactown_guard-0.1.9-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.0 MB
Release files / pactown_guard-0.1.9.tar.gz
| Download URL | pactown_guard-0.1.9.tar.gz |
|---|---|
| Size | 2.3 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f2a6acf0d27eafc0046589b282735d2efa0d9599a0c4c621d47fe151858fe284
|
|
BLAKE2b-256 checksum How to use checksums |
9228ee7124a337d7c9bf854e3c55235815ffa25924810ac33c6590422d0bed3b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / pactown_guard-0.1.9-py3-none-any.whl
| Download URL | pactown_guard-0.1.9-py3-none-any.whl |
|---|---|
| Size | 2.7 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
45132216e4b2dec295ea31270de3950b74d7b0ddb2f7ed7bec3286942a7f4bd6
|
|
BLAKE2b-256 checksum How to use checksums |
0d915c6332bd190364cba638606f287c0745f96b4eda2ab8d7ec9603bcaf3908
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|