made using Leaflet

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

made using Leaflet