Skip to content

Commit 2bbb2c9

Browse files
author
Aegis Stack
committed
Update Docs
1 parent 101e7c7 commit 2bbb2c9

114 files changed

Lines changed: 1713 additions & 1539 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Makefile

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -137,25 +137,18 @@ help: ## Show this help message
137137

138138
gif: ## Convert MP4 to high-quality GIF (usage: make gif INPUT=recording.mp4)
139139
ifndef INPUT
140-
@echo "Usage: make gif INPUT=path/to/video.mp4 [OUTPUT=output.gif] [FPS=15] [WIDTH=1200] [TRIM=2]"
140+
@echo "Usage: make gif INPUT=path/to/video.mp4 [OUTPUT=output.gif] [FPS=15] [WIDTH=1200]"
141141
@echo ""
142142
@echo "Options:"
143143
@echo " INPUT - Required. Path to input MP4 file"
144144
@echo " OUTPUT - Optional. Output GIF path (default: same name as input with .gif)"
145145
@echo " FPS - Optional. Frames per second (default: 15, max 30)"
146146
@echo " WIDTH - Optional. Output width in pixels (default: 1200)"
147-
@echo " TRIM - Optional. Seconds to trim from end (default: 0)"
148147
@exit 1
149148
endif
150149
@echo "🎬 Converting $(INPUT) to GIF..."
151150
@mkdir -p .gif-frames
152-
ifdef TRIM
153-
$(eval DURATION := $(shell ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 "$(INPUT)"))
154-
$(eval END_TIME := $(shell echo "$(DURATION) - $(TRIM)" | bc))
155-
@ffmpeg -i "$(INPUT)" -t $(END_TIME) -vf "fps=$(or $(FPS),15),scale=$(or $(WIDTH),1200):-1:flags=lanczos" -y .gif-frames/frame_%04d.png
156-
else
157151
@ffmpeg -i "$(INPUT)" -vf "fps=$(or $(FPS),15),scale=$(or $(WIDTH),1200):-1:flags=lanczos" -y .gif-frames/frame_%04d.png
158-
endif
159152
@gifski -o "$(or $(OUTPUT),$(basename $(INPUT)).gif)" --fps $(or $(FPS),15) --quality 90 .gif-frames/*.png
160153
@rm -rf .gif-frames
161154
@echo "✅ Created: $(or $(OUTPUT),$(basename $(INPUT)).gif)"
@@ -171,24 +164,16 @@ endif
171164

172165
gif-demo: ## Convert demo recording to GIF (usage: make gif-demo NAME=overseer)
173166
ifndef NAME
174-
@echo "Usage: make gif-demo NAME=overseer [TRIM=2]"
167+
@echo "Usage: make gif-demo NAME=overseer"
175168
@echo " Converts demos/recordings/NAME.mov -> docs/images/NAME-demo.gif"
176169
@echo ""
177-
@echo "Options:"
178-
@echo " NAME - Required. Name of recording (without extension)"
179-
@echo " TRIM - Optional. Seconds to trim from end"
180-
@echo ""
181170
@echo "Workflow:"
182171
@echo " 1. Record screen on Mac"
183172
@echo " 2. Save to demos/recordings/NAME.mov"
184-
@echo " 3. Run: make gif-demo NAME=NAME TRIM=2"
173+
@echo " 3. Run: make gif-demo NAME=NAME"
185174
@exit 1
186175
endif
187-
ifdef TRIM
188-
@$(MAKE) gif INPUT=demos/recordings/$(NAME).mov OUTPUT=docs/images/$(NAME)-demo.gif FPS=30 WIDTH=1920 TRIM=$(TRIM)
189-
else
190176
@$(MAKE) gif INPUT=demos/recordings/$(NAME).mov OUTPUT=docs/images/$(NAME)-demo.gif FPS=30 WIDTH=1920
191-
endif
192177

193178
# ============================================================================
194179
# TEMPLATE TESTING TARGETS

README.md

Lines changed: 23 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -42,9 +42,9 @@ uvx aegis-stack init task-processor --components scheduler,worker
4242
cd my-api && uv sync && cp .env.example .env && make serve
4343
```
4444

45-
**Installation alternatives:** See the [Installation Guide](docs/installation.md) for `uv tool install`, `pip install`, and development setup.
45+
**Installation alternatives:** See the [Installation Guide](https://lbedner.github.io/aegis-stack/installation/) for `uv tool install`, `pip install`, and development setup.
4646

47-
## 🌱 Your Stack Grows With You
47+
## Your Stack Grows With You
4848

4949
**Your choices aren't permanent.** Start with what you need today, add components when requirements change, remove what you outgrow.
5050

@@ -60,6 +60,9 @@ aegis add worker --project-path ./my-api
6060

6161
# Month 6: Scheduler not needed
6262
aegis remove scheduler --project-path ./my-api
63+
64+
# Stay current with template improvements
65+
aegis update
6366
```
6467

6568
| Framework | Add Later? | Remove Later? | Git Conflicts? |
@@ -69,15 +72,15 @@ aegis remove scheduler --project-path ./my-api
6972

7073
![Component Evolution Demo](docs/images/aegis-evolution-demo.gif)
7174

72-
Most frameworks lock you in at `init`. Aegis Stack doesn't. See **[Evolving Your Stack](docs/evolving-your-stack.md)** for the complete guide.
75+
Most frameworks lock you in at `init`. Aegis Stack doesn't. See **[Evolving Your Stack](https://lbedner.github.io/aegis-stack/evolving-your-stack/)** for the complete guide.
7376

7477
## See It In Action
7578

7679
### Overseer - Built-In Health Monitoring
7780

7881
![Overseer](docs/images/overseer-demo.gif)
7982

80-
**[Overseer](docs/overseer/index.md)** is the read-only health monitoring dashboard built into every Aegis Stack project. It provides real-time visibility into all your components (Backend, Database, Worker, Scheduler) and services (Auth, AI, Comms) through a web UI and CLI commands.
83+
**[Overseer](https://lbedner.github.io/aegis-stack/overseer/)** is the read-only health monitoring dashboard built into every Aegis Stack project. It provides real-time visibility into all your components (Backend, Database, Worker, Scheduler) and services (Auth, AI, Comms) through a web UI and CLI commands.
8184

8285
No Datadog. No New Relic. No vendor lock-in. Just centralized monitoring you own from day one.
8386

@@ -89,30 +92,27 @@ Rich terminal output showing detailed component status, health metrics, and syst
8992

9093
## Available Components & Services
9194

92-
### Infrastructure Components
93-
| Component | Purpose | Status |
94-
|-----------|---------|--------|
95-
| **Core** (FastAPI + Flet) | Web API + Frontend |**Always Included** |
96-
| **Database** | SQLite + SQLModel ORM |**Available** |
97-
| **Scheduler** | Background tasks, cron jobs |**Available** |
98-
| **Worker** | Async task queues (arq + Redis) | 🧪 **Experimental** |
99-
| **Cache** | Redis caching and sessions | 🚧 **Coming Soon** |
95+
**Components** (infrastructure)
96+
97+
- **Core** - FastAPI + Flet (always included)
98+
- **Database** - SQLite + SQLModel ORM
99+
- **Scheduler** - Background tasks, cron jobs
100+
- **Worker** - Async task queues (arq + Redis)
101+
102+
**Services** (business logic)
100103

101-
### Business Services
102-
| Service | Purpose | Status |
103-
|---------|---------|--------|
104-
| **[Auth](docs/services/auth/index.md)** | User authentication & JWT |**Available** |
105-
| **[AI](docs/services/ai/index.md)** | Multi-provider AI chat | 🧪 **Experimental** |
106-
| **[Comms](docs/services/comms/index.md)** | Email, SMS, voice calls | 🧪 **Experimental** |
104+
- **[Auth](https://lbedner.github.io/aegis-stack/services/auth/)** - User authentication & JWT
105+
- **[AI](https://lbedner.github.io/aegis-stack/services/ai/)** - Multi-provider AI chat
106+
- **[Comms](https://lbedner.github.io/aegis-stack/services/comms/)** - Email, SMS, voice calls
107107

108-
**See detailed documentation:** [Components →](docs/components/index.md) | [Services →](docs/services/index.md)
108+
[Components Docs ](https://lbedner.github.io/aegis-stack/components/) | [Services Docs ](https://lbedner.github.io/aegis-stack/services/)
109109

110110
## Learn More
111111

112-
- **[CLI Reference](docs/cli-reference.md)** - Complete command reference
113-
- **[About](docs/about.md)** - The philosophy and vision behind Aegis Stack
114-
- **[Evolving Your Stack](docs/evolving-your-stack.md)** - Add/remove components as needs change
115-
- **[Technology Stack](docs/technology.md)** - Battle-tested technology choices
112+
- **[CLI Reference](https://lbedner.github.io/aegis-stack/cli-reference/)** - Complete command reference
113+
- **[About](https://lbedner.github.io/aegis-stack/about/)** - The philosophy and vision behind Aegis Stack
114+
- **[Evolving Your Stack](https://lbedner.github.io/aegis-stack/evolving-your-stack/)** - Add/remove components as needs change
115+
- **[Technology Stack](https://lbedner.github.io/aegis-stack/technology/)** - Battle-tested technology choices
116116

117117
## For The Veterans
118118

aegis/__main__.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424
app = typer.Typer(
2525
name="aegis",
2626
help=(
27-
"🛡️ Aegis Stack - Production-ready Python foundation\n\n"
27+
"Aegis Stack - Production-ready Python foundation\n\n"
2828
"Quick start: uvx aegis-stack init my-project\n\n"
2929
"Available components: redis, worker, scheduler, scheduler[sqlite], database\n"
3030
"Backend selection: Use --backend flag or bracket syntax (sqlite only)"
3131
),
3232
epilog=(
33-
"💡 Try it instantly: uvx aegis-stack init my-project\n"
34-
"📚 More info: https://lbedner.github.io/aegis-stack/"
33+
"Try it instantly: uvx aegis-stack init my-project\n"
34+
"More info: https://lbedner.github.io/aegis-stack/"
3535
),
3636
add_completion=False,
3737
)

aegis/cli/callbacks.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def validate_and_resolve_components(
3434

3535
# Check for empty components before filtering
3636
if any(not c for c in components_raw):
37-
typer.echo("❌ Empty component name is not allowed", err=True)
37+
typer.secho("Empty component name is not allowed", fg="red", err=True)
3838
raise typer.Exit(1)
3939

4040
selected = [c for c in components_raw if c]
@@ -47,7 +47,7 @@ def validate_and_resolve_components(
4747
errors = DependencyResolver.validate_components(clean_selected)
4848
if errors:
4949
for error in errors:
50-
typer.echo(f"❌ {error}", err=True)
50+
typer.secho(error, fg="red", err=True)
5151
raise typer.Exit(1)
5252

5353
# Resolve dependencies (using clean names)
@@ -60,13 +60,13 @@ def validate_and_resolve_components(
6060
original_clean = clean_component_names(selected)
6161
auto_added = DependencyResolver.get_missing_dependencies(original_clean)
6262
if auto_added:
63-
typer.echo(f"📦 Auto-added dependencies: {', '.join(auto_added)}")
63+
typer.echo(f"Auto-added dependencies: {', '.join(auto_added)}")
6464

6565
# Show recommendations
6666
recommendations = DependencyResolver.get_recommendations(resolved_clean)
6767
if recommendations:
6868
rec_list = ", ".join(recommendations)
69-
typer.echo(f"💡 Recommended: {rec_list}")
69+
typer.echo(f"Recommended: {rec_list}")
7070
# Note: Skip interactive recommendations for now to keep it simple
7171

7272
return resolved
@@ -89,15 +89,17 @@ def validate_and_resolve_services(
8989

9090
# Check for empty services before filtering
9191
if any(not s for s in services_raw):
92-
typer.echo("❌ Empty service name is not allowed", err=True)
92+
typer.secho("Empty service name is not allowed", fg="red", err=True)
9393
raise typer.Exit(1)
9494

9595
selected_services = [s for s in services_raw if s]
9696

9797
# Validate services exist
9898
unknown_services = [s for s in selected_services if s not in SERVICES]
9999
if unknown_services:
100-
typer.echo(f"❌ Unknown services: {', '.join(unknown_services)}", err=True)
100+
typer.secho(
101+
f"Unknown services: {', '.join(unknown_services)}", fg="red", err=True
102+
)
101103
available = list(SERVICES.keys())
102104
typer.echo(f"Available services: {', '.join(available)}", err=True)
103105
raise typer.Exit(1)
@@ -109,6 +111,6 @@ def validate_and_resolve_services(
109111

110112
# Show what components were added by services
111113
if service_added:
112-
typer.echo(f"📦 Services require components: {', '.join(service_added)}")
114+
typer.echo(f"Services require components: {', '.join(service_added)}")
113115

114116
return selected_services

0 commit comments

Comments
 (0)