A modern bullet journaling application built with Next.js and Tailwind CSS.
This initial version uses Google Sheets as the backend, making it incredibly easy and free to deploy. No database setup, no server costs—just a Google Sheet and a simple Apps Script deployment.
- Task management with status tracking
- Project organization
- Due date management
- Notes and descriptions
- Drag and drop reordering
- Filtering and search
- Responsive design
This app can integrate with Google Apps Script for persistent storage. The integration uses a proxy approach to avoid CORS issues:
- Frontend calls local API: All requests go to
/api/itemsendpoints - API proxies to Google Apps Script: When
NEXT_PUBLIC_GAS_BASE_URLis configured, the API forwards requests to Google Apps Script - No CORS issues: Since the frontend only talks to your local API, there are no cross-origin restrictions
Set the environment variable:
NEXT_PUBLIC_GAS_BASE_URL=https://script.google.com/macros/s/YOUR_SCRIPT_ID/execThe following actions are supported:
?action=list- Retrieve all tasks?action=add- Create a new task?action=update- Update an existing task?action=move- Reorder tasks?action=delete- Delete a task (via update with deleted flag)
When Google Apps Script is not configured or unavailable, the app falls back to local storage for development and testing.
To use Google Sheets as your persistent storage backend:
- Go to Google Sheets and create a new spreadsheet
- Name the sheet (e.g., "Ballistic Tasks")
- Create a sheet tab called "Main" (or rename the default sheet)
- Add a header row with the following columns:
- Column A:
id - Column B:
created_at - Column C:
updated_at - Column D:
task - Column E:
project - Column F:
status - Column G:
notes
- Column A:
- In your Google Sheet, click Extensions > Apps Script
- Delete any default code in the editor
- Copy the entire contents of
google-sheet-script.jsfrom this repository - Paste it into the Apps Script editor
- Click the save icon (💾) and name your project (e.g., "Ballistic API")
- Click Deploy > New deployment
- Click the gear icon (⚙️) next to "Select type" and choose Web app
- Configure the deployment:
- Description: "Ballistic API v1" (or any description)
- Execute as: Me
- Who has access: Anyone
- Click Deploy
- Review and authorise the permissions when prompted
- Copy the Web app URL (it will look like
https://script.google.com/macros/s/YOUR_SCRIPT_ID/exec)
Create a .env file in the project root and add:
NEXT_PUBLIC_GAS_BASE_URL=https://script.google.com/macros/s/YOUR_SCRIPT_ID/execAlternatively, add this environment variable to the project as prescribed by the platform that you are deploying to.
Replace YOUR_SCRIPT_ID with the actual script ID from your deployment URL.
- Start the development server:
npm run dev - Add a task in the app
- Check your Google Sheet - the task should appear in the "Main" sheet
When you need to update the Apps Script:
- Make changes in the Apps Script editor
- Click Deploy > Manage deployments
- Click the edit icon (✏️) next to your deployment
- Under "Version", select New version
- Click Deploy
The deployment URL remains the same, so you don't need to update your environment variables.
npm install
npm run dev./runtests.shnpm run build
npm startContributions are welcome! Whether you're fixing bugs, adding features, or improving documentation, your help is appreciated.
- Check existing issues or create a new one to discuss your idea
- Fork the repository and create a new branch for your work
- Make your changes and add tests if applicable
- Run the tests with
./runtests.shto ensure everything works - Submit a pull request with a clear description of your changes
For detailed instructions, please see CONTRIBUTING.md.
New to the project? Look for issues labelled "good first issue" to get started.
Feel free to open an issue to discuss new features, report bugs, or ask questions. We're here to help!