Manage Apple Reminders via the `remindctl` CLI on macOS (list, add, edit, complete, delete)....
npx skills add Vabrizio2003/rust-webapp-skill --skill "rust-webapp"
Install specific skill from multi-skill repository
# Description
Build full-stack web applications using Rust (Axum + SQLx) with HTMX + Alpine.js frontend and Neon (serverless PostgreSQL). Use when asked to create web apps, CRUD apps, dashboards, forms, or any stateful web application. Triggers on requests like "build a todo app", "create a voting app", "make a dashboard", "build a blog", etc.
# SKILL.md
name: rust-webapp
description: Build full-stack web applications using Rust (Axum + SQLx) with HTMX + Alpine.js frontend and Neon (serverless PostgreSQL). Use when asked to create web apps, CRUD apps, dashboards, forms, or any stateful web application. Triggers on requests like "build a todo app", "create a voting app", "make a dashboard", "build a blog", etc.
Build full-stack stateful web apps using Axum + HTMX + Alpine.js + Neon (PostgreSQL).
Stack: Axum + SQLx (Rust), Askama templates + HTMX + Alpine.js + PicoCSS, Neon (PostgreSQL), Docker.
Workflow
Phase 1: Setup
Prerequisites (install once):
npm i -g neonctl
brew install jq
cargo install sqlx-cli --features postgres,native-tls
Required env vars: NEON_API_KEY, NEON_PROJECT_ID
Scaffold app:
NEON_BRANCH_TTL=2h .claude/skills/rust-webapp/scripts/scaffold <app-name> .
Creates app files and a Neon branch ({app}-dev) with 2h expiration.
Phase 2: Data Modeling
- Define models in
src/models.rs - Write migration SQL in
migrations/001_init.sql - Use
SERIALfor i32,BIGSERIALfor i64
Reference: Models - SQLx patterns, struct definitions, type mapping
Phase 3: Backend Implementation
- Add route handlers in
src/main.rs - All handlers return
Result<T, AppError>- use?operator - NEVER use
.expect()or.unwrap()- causes server crashes - Route params use
{id}syntax (NOT:id)
Reference: Handlers - CRUD patterns, router setup, transactions
Phase 4: Frontend
- Update Askama templates in
templates/ - Delete unused template files (create.html, edit.html if not needed)
- Use HTMX for interactivity, Alpine.js for state
Reference: Templates - Askama, HTMX, Alpine patterns
Reference: Design - CSS components, layout patterns
Phase 5: Validation
Validate (runs cargo check, clippy, tests, release build):
.claude/skills/rust-webapp/scripts/validate .
Fix all errors before completing.
Template Structure
βββ Cargo.toml # Dependencies
βββ Dockerfile # Multi-stage Rust build
βββ src/
β βββ main.rs # Axum server, routes, templates
β βββ db.rs # SQLx pool setup
β βββ models.rs # Data structs
βββ templates/
β βββ base.html # Base layout (PicoCSS/HTMX/Alpine CDN)
β βββ index.html # List view
β βββ edit.html # Edit form
β βββ create.html # Create form
βββ static/
β βββ styles.css # Custom CSS overrides
βββ migrations/
βββ 001_init.sql # Database schema
Critical Rules
- NEVER
.expect()or.unwrap()in handlers - use?operator - Route params:
{id}not:id- wrong syntax compiles but panics at runtime - All handlers return
Result<T, AppError> - Check
rows_affected()for DELETE/UPDATE to return 404 - Use compile-time SQLx macros (
query!,query_as!) - Ensure the app has enough logs for basic observability
Full list: Pitfalls
Constraints
- Neon (PostgreSQL) required - needs
DATABASE_URL - All routes at root level (/, /new, /{id}/edit)
- Strict clippy lints - must pass validation
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.