Mobile Organization
A personal life organization system using GitLab issues and boards, managed through a local software stack that interacts with GitLab's API. Capture any thought, idea, or note as an issue, triage backlog items into meaningful boards/categories, and receive daily prioritized GitLab summary issues.
Features
Thought Capture: Turn any idea, note, or task into a GitLab issue instantly
Low-friction Triage: Default quick captures to Backlog, then categorize them in a short morning housekeeping pass
Daily Summary Issues: Receive morning GitLab notifications with prioritized tasks based on a priority matrix and due dates
Automated Task Management: Automatically transfer tasks between boards based on schedules and priorities
Local Software Stack: Run everything locally with configuration managed through this repository
GitLab Integration: Full API integration for creating, updating, and moving issues across boards
What We Have Built
A CLI capture command for creating GitLab issues quickly.
A Flask web app for mobile-first capture, notes, backlog triage, daily preview, recent issues, and GitLab shortcuts.
Label suggestion support in quick capture, including existing labels and typed new labels.
Title/description-aware capture suggestions that can auto-select obvious due date, board, category, labels, and show a loading state while analyzing.
Inline creation for new board/status labels, matching GitLab board views when possible, and category labels directly from Quick Capture.
A morning triage page at /triage for assigning board/status, category, priority, and extra labels to backlog items.
Daily summary generation that excludes personal notes and untriaged backlog items.
Board maintenance commands for overdue transfers, weekly-to-today transfers, and completed-item archiving.
Setup automation for GitLab labels and boards.
Cron documentation and helper script for the recommended morning/evening schedule.
Architecture
The system consists of:
Capture Service: Quick input interface for creating issues
Triage Workflow: Morning backlog review for assigning board, category, priority, and extra labels
Categorization Engine: Rule-based sorting of triaged issues into the daily priority matrix
Priority Matrix: Algorithm to score and prioritize tasks based on urgency, importance, and due dates
Summary Scheduler: Daily GitLab summary issue generation
Board Manager: Automated movement of issues between boards
GitLab API Client: Handles all interactions with GitLab repositories
Boards/Categories
We organize life into the following GitLab boards:
Long-term Goals - Major life objectives (career, health, relationships)
Short-term Goals - 3-6 month objectives
This Quarter - Current quarter priorities
This Month - Monthly focus areas
This Week - Weekly objectives
Today Tasks - Must-do items for today
Tomorrow Tasks - Items planned for tomorrow
Random Ideas - Creative thoughts, inspiration, future possibilities
Personal Notes - Personal journal entries and reflections (no priority)
Backlog - Unprocessed items waiting for categorization
In Progress - Currently active tasks
Completed - Finished items (archived)
Using GitLab for Organization
Issues
Every thought becomes an issue: Use the title for the main idea, description for details
Due dates: Set due dates on issues for time-sensitive items
Assignees: Assign to yourself or others if collaborative
Milestones: Group issues by time periods (e.g., "Q2 2026", "This Week")
Labels/Tags
Use labels to add metadata:
Priority: priority::high, priority::medium, priority::low
Category: category::work, category::personal, category::health
Status: status::backlog, status::in-progress, status::done
Type: type::task, type::idea, type::reminder, type::note
Urgency: urgent, important
Quick capture can add labels immediately when the answer is obvious. If it is not obvious, leave the item in status::backlog; backlog items stay out of the daily priority matrix until morning triage assigns a real board/status.
Boards
Kanban view: Each board represents a category with columns like "To Do", "Doing", "Done"
Board automation: Use GitLab's board automation to move issues based on labels
Multiple boards: Create separate boards for different life areas or time frames
Tips
Quick capture: Use GitLab's quick actions in comments (e.g., /label ~priority::high)
Notifications: Configure email notifications for mentions, due dates, etc.
Search: Use advanced search to find issues by labels, assignee, due date
Time tracking: Use /spend command in comments to track time on tasks
Total Workflow
This system works best when capture and categorization are separated.
Capture during the day
Use the web app for the lowest-friction flow: http://localhost:5001
Use Quick Capture for actionable tasks, reminders, and ideas.
Leave the board as Backlog / triage later unless the destination is obvious.
Add labels while typing when they are obvious; the form suggests existing GitLab labels and shows when a new one would be created.
As you type the title and description, Quick Capture suggests labels, shows a small loading indicator, and auto-selects obvious due date, board, and category values unless you have already changed those fields.
Choose Create new board/status... or Create new category... when the existing options do not fit. The app normalizes those names into status::<name> or category::<name> labels and creates them in GitLab. For new boards, it also tries to create a matching GitLab board view.
Newly-created status::* and category::* labels are pulled from GitLab into the Board and Category dropdowns on the next page render.
Use Quick Note for journal/reflection items. Notes get type::note and stay out of the priority matrix.
Morning board maintenance
Run ./launch manage_boards transfer-overdue automatically before triage.
This moves overdue dated issues into status::today so they are visible before you review the day.
Morning triage
Open http://localhost:5001/triage.
Review anything still labeled status::backlog.
Assign a board/status such as Today Tasks, This Week, This Month, Random Ideas, or In Progress.
Add category, priority, urgency, and extra labels only where useful.
Leave uncertain items in Backlog; backlog items are intentionally excluded from the daily summary.
Daily preview
Click Open Daily Preview from triage, or open http://localhost:5001/daily-preview.
Confirm that the matrix reflects what you actually want to see today.
The preview includes triaged tasks and skips personal notes and backlog items.
To stage tomorrow, open http://localhost:5001/tomorrow-preview; it includes items labeled status::tomorrow or due tomorrow.
Daily summary issue
Cron runs ./launch daily_email send after your triage window.
The script creates a GitLab issue with the daily priority matrix.
GitLab notifications deliver the summary through your normal GitLab email settings.
Work and adjust
Use GitLab Issues and Boards links in the web app to jump into the project.
Move tasks between labels/boards as priorities shift.
Evening cleanup
Run ./launch manage_boards daily automatically in the evening.
This archives completed items and performs board maintenance for the next day.
Setup
Prerequisites
Python 3.8+
GitLab account with API access (no email service needed!)
Personal Access Token with api, read_repository, write_repository scopes
Installation
Clone this repository:
Set up virtual environment:
Run setup script:
Creating GitLab personal access token
Setting up project configuration
Configuring GitLab repository with boards and labels
Setting up GitLab notification preferences
Set up GitLab repository and boards (see setup script output)
Configuration
The setup script creates a .env file with:
GITLAB_URL: Your GitLab instance URL
GITLAB_TOKEN: Personal access token with API access
GITLAB_PROJECT_ID: Project ID for issues
PRIORITY_URGENT_IMPORTANT, PRIORITY_URGENT_NOT_IMPORTANT, PRIORITY_NOT_URGENT_IMPORTANT, PRIORITY_NOT_URGENT_NOT_IMPORTANT: Priority matrix weights
GitLab Notification Setup
Configure GitLab to email you about new issues:
Go to Settings > Notifications in GitLab
Set "Issues events" to "On mention" or "Participate"
Enable email notifications for new issues
Daily summary issues will trigger email notifications automatically
Cron Jobs & Automation
Set up these cron jobs for automated daily operation. The important part is leaving a triage window between board maintenance and summary creation.
Daily Morning Routine (Recommended)
# Edit crontab crontab -e # Add these lines (adjust paths to your repository): # 7:30 AM: Move overdue dated issues to Today before triage 30 7 * * * /Users/wesleyworden/repos/mobile-organization/launch manage_boards transfer-overdue # 8:30 AM: Create daily summary issue after morning triage 30 8 * * * /Users/wesleyworden/repos/mobile-organization/launch daily_email send # 9 PM: Archive completed tasks and run full board maintenance 0 21 * * * /Users/wesleyworden/repos/mobile-organization/launch manage_boards daily
# Edit crontab crontab -e # Add these lines (adjust paths to your repository): # 7:30 AM: Move overdue dated issues to Today before triage 30 7 * * * /Users/wesleyworden/repos/mobile-organization/launch manage_boards transfer-overdue # 8:30 AM: Create daily summary issue after morning triage 30 8 * * * /Users/wesleyworden/repos/mobile-organization/launch daily_email send # 9 PM: Archive completed tasks and run full board maintenance 0 21 * * * /Users/wesleyworden/repos/mobile-organization/launch manage_boards daily
Optional: Keep the Web App Running
For regular use, run the web app when you are actively capturing or triaging:
./launch web
./launch web
If you want it always available, use a system service such as launchd on macOS rather than cron. Cron is best for short scheduled jobs; the Flask web app is a long-running process.
Alternative: Manual Morning Flow
# Run this first, then triage in the browser, then create the summary ./launch manage_boards transfer-overdue open http://localhost:5001/triage ./launch daily_email send
# Run this first, then triage in the browser, then create the summary ./launch manage_boards transfer-overdue open http://localhost:5001/triage ./launch daily_email send
What Each Job Does
Morning Board Management (7:30 AM)
Moves overdue issues to the Today Tasks board
Ensures critical dated items are visible before triage
Runs before you review Backlog
Daily Summary Creation (8:30 AM)
Creates a GitLab issue with triaged tasks organized by priority
Excludes type::note and status::backlog issues
Triggers GitLab email notification with your daily priorities
Runs after your morning triage window
Evening Board Cleanup (9 PM)
Archives completed issues (closes them)
Transfers weekly tasks that are now due
Keeps your boards clean and organized
Quick Cron Setup (Recommended)
For easy cron job setup, run the included helper script:
./setup_cron.sh
./setup_cron.sh
This opens an interactive installer. It backs up your current crontab, installs the managed Mobile Organization block, and can update existing jobs if you change the schedule later.
Useful commands:
./setup_cron.sh install # Install if no managed jobs exist ./setup_cron.sh update # Replace the managed jobs with the current recommended schedule ./setup_cron.sh remove # Remove only the Mobile Organization jobs ./setup_cron.sh list # Show your current crontab ./setup_cron.sh test # Run non-mutating command checks and daily summary previews
./setup_cron.sh install # Install if no managed jobs exist ./setup_cron.sh update # Replace the managed jobs with the current recommended schedule ./setup_cron.sh remove # Remove only the Mobile Organization jobs ./setup_cron.sh list # Show your current crontab ./setup_cron.sh test # Run non-mutating command checks and daily summary previews
Cron Job Testing
Test your cron jobs manually first:
# Test each job individually ./launch manage_boards transfer-overdue ./launch daily_email send --preview ./launch daily_email send --dry-run ./launch manage_boards daily # Check system logs for cron execution grep CRON /var/log/syslog
# Test each job individually ./launch manage_boards transfer-overdue ./launch daily_email send --preview ./launch daily_email send --dry-run ./launch manage_boards daily # Check system logs for cron execution grep CRON /var/log/syslog
Troubleshooting Cron Jobs
Jobs not running? Check file permissions: chmod +x launch
Path issues? Use absolute paths in cron
Environment issues? The launch script handles virtual environment activation
Logs location: Cron logs are typically in /var/log/syslog or /var/log/cron
Usage
All commands use the launcher script which activates the virtual environment:
Quick Capture
./launch capture "Buy groceries for dinner" ./launch capture "Book dentist appointment" --labels "status::backlog,type::task,category::health"
./launch capture "Buy groceries for dinner" ./launch capture "Book dentist appointment" --labels "status::backlog,type::task,category::health"
CLI capture creates the issue with the labels you pass. The web app is better for everyday capture because it suggests existing labels as you type and lets you choose the initial board/category.
Daily Summary
./launch daily_email send ./launch daily_email send --preview ./launch daily_email send --dry-run ./launch daily_email tomorrow-preview
./launch daily_email send ./launch daily_email send --preview ./launch daily_email send --dry-run ./launch daily_email tomorrow-preview
Creates or previews a daily summary issue in GitLab with all triaged tasks organized by priority. The tomorrow preview shows items labeled status::tomorrow or due tomorrow. GitLab will send you an email notification based on your notification settings.
Board Management
./launch manage_boards transfer-overdue ./launch manage_boards daily
./launch manage_boards transfer-overdue ./launch manage_boards daily
Web Interface
./launch web
./launch web
Visit http://localhost:5001 to access the mobile-first web interface with:
📱 Quick Capture: Fast issue creation with title, description, due date, board, category, and suggested labels
Auto Suggestions: Title/description-aware suggestions for due date, likely board, likely category, existing labels, and optional new topic labels
Inline Structure Creation: Create new board/status and category labels without leaving Quick Capture
Morning Triage: Review backlog items, assign board/category/priority labels, then open the daily preview
GitLab Shortcuts: One-click links to the project, issues, boards, labels, milestones, and new issue page
Quick Notes: Personal journal entries that bypass priority system
Daily Summary Preview: View your daily priority matrix directly in the browser
Tomorrow Preview: View tomorrow's priority matrix directly in the browser
🔗 Recent Issues: See your latest issues with direct links to GitLab
📲 PWA Support: Install as a mobile app for offline access
Recommended morning flow: Open http://localhost:5001/triage, clean up Backlog, then click Open Daily Preview. The automated 8:30 AM summary should run after that triage window.
Web Screens
/ - Quick capture, quick note, GitLab shortcuts, and recent issues.
/triage - Morning backlog housekeeping before summary creation.
/daily-preview - Browser preview of the daily priority matrix.
/tomorrow-preview - Browser preview of tomorrow's priority matrix.
GitLab Shortcuts
The web app shows one-click links to the configured GitLab project:
Project - Main project page.
Issues - All GitLab issues.
Boards - Kanban boards for status/category views.
Labels - Label management.
Milestones - Time-based grouping such as month/quarter goals.
New Issue - GitLab's native issue creation form.
API Endpoints
POST /capture - Create new issue
GET /triage - Review backlog issues before daily summary
POST /triage/<iid> - Update an issue's board/category/priority labels
POST /capture_note - Create a personal note issue
GET /daily-preview - Preview the daily priority matrix
GET /tomorrow-preview - Preview tomorrow's priority matrix
GET /manifest.json and GET /sw.js - PWA metadata and service worker
Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests
Submit a merge request
License
MIT License - see LICENSE file for details
GitLab Actions/API for Automation
Board Transfers:
Handled via GitLab REST API in manage_boards.py
Automated through cron jobs (see Cron Jobs section above)
No GitLab Actions needed - local scripts handle all automation
Daily Summaries:
Created as GitLab issues via daily_email.py
GitLab's notification system handles email delivery
Configure notifications in: User Settings > Notifications
Why Local Scripts vs GitLab Actions:
GitLab Actions = CI/CD pipelines (builds, tests, deployments)
Not suitable for personal daily automation
Cron jobs provide reliable local execution
Better control over timing and environment