Tasks that think of you.
A self-hosted, privacy-first recurring task manager with intelligent scheduling and deadline handling.
| Feature | Description |
|---|---|
| 🔁 Flexible Scheduling | Daily, weekly, monthly, yearly, or custom intervals (every X days/weeks) |
| 📅 Week A/B Patterns | Perfect for alternating schedules using interval anchoring |
| ⚡ Smart Deadline Behavior | Choose between stacking overdue tasks or marking them as failed |
| 📊 Dashboard View | Today/Tomorrow overview with open, completed, and overdue tasks |
| 🗓️ Calendar View | Monthly calendar with navigation and daily details |
| 📱 PWA Support | Install as a native app on your phone |
| 🔒 Password Protected | Simple authentication for personal use |
| 🌍 Multi-language | English and German, easily extensible |
| 🏠 Self-hosted | Your data stays on your server |
mkdir recury && cd recurycurl -O https://raw.githubusercontent.com/ErNobyl-1/Recury/main/docker-compose.yml
curl -O https://raw.githubusercontent.com/ErNobyl-1/Recury/main/.env.example
mv .env.example .envAPP_PORT=8123
AUTH_PASSWORD=your-secure-password # Change this!
SESSION_SECRET=your-random-string # Change this!💡 Generate a secure secret:
openssl rand -hex 32
docker compose up -dOpen http://your-server:8123 and log in with your password.
| Variable | Description | Default |
|---|---|---|
APP_PORT |
Port the app runs on | 8123 |
AUTH_PASSWORD |
Login password | changeme |
SESSION_SECRET |
Secret for secure cookies | - |
TZ |
Timezone | Europe/Berlin |
docker compose pull
docker compose up -ddocker compose downYour data persists in the Docker volume.
Local Docker build
# Build and start locally
docker compose -f docker-compose.dev.yml up -d --build
# Stop
docker compose -f docker-compose.dev.yml downUses a separate volume (recury-data-dev) to avoid conflicts with production data.
Local development without Docker
# Install dependencies
npm install
# Generate Prisma client
npm run db:generate
# Create database
npm run db:push
# Start dev servers
npm run dev- API: http://localhost:3000
- Web: http://localhost:5173
Recury/
├── packages/
│ ├── api/ # Backend (Fastify + Prisma + SQLite)
│ └── web/ # Frontend (React + Vite + TailwindCSS)
├── docker-compose.yml # Production (uses GHCR image)
├── docker-compose.dev.yml # Development (local build)
├── Dockerfile
└── .env.example
View API Endpoints
| Method | Endpoint | Description |
|---|---|---|
| POST | /api/auth/login |
Log in |
| POST | /api/auth/logout |
Log out |
| GET | /api/auth/status |
Check auth status |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/templates |
List all tasks |
| POST | /api/templates |
Create task |
| PUT | /api/templates/:id |
Update task |
| DELETE | /api/templates/:id |
Archive task |
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/dashboard |
Today/Tomorrow overview |
| GET | /api/instances?from=&to= |
Get instances for date range |
| POST | /api/instances/:id/complete |
Mark as completed |
For a bi-weekly rotation:
Week A Task:
- Schedule: Interval
- Every: 2 weeks
- Anchor: First day of Week A
Week B Task:
- Schedule: Interval
- Every: 2 weeks
- Anchor: First day of Week B (+1 week offset)
- Passwords are hashed (bcrypt)
- Session-based authentication with secure cookies
- Recommended: Access only via local network or VPN
MIT © Recury