🥃
Bourbon App
Development Dashboard
0 Total Tasks
0 Complete
0% Progress
0 Behind
Tasks Complete
0
of 0 total tasks
Overall Progress
0%
Est. completion tracking
Behind Schedule
0
tasks past due date
Hours Logged
0h
of ~130h estimated
```
Phase Progress
All 9 phases
Recent Activity
Latest updates
```
Full Roadmap
Click any phase to expand tasks
```
```
March 2026
Scheduled tasks and deadlines
Upcoming this week
Alerts & Notifications
Tasks needing attention
Google Sheets Backup
Auto-syncs roadmap data on every update
```
Not configured — enter your Google Apps Script URL below to enable sync
Setup: Google Sheets Integration
1
Create a new Google Sheet
Go to sheets.google.com and create a new spreadsheet named "Bourbon App Roadmap". Create two tabs: Roadmap and Activity Log.
2
Open Apps Script editor
In your Sheet, go to Extensions → Apps Script. Delete any existing code and paste the script below:
// Bourbon App Roadmap Sync Script ``` // Paste this entire block into Apps Script function doPost(e) { try { var data = JSON.parse(e.postData.contents); var ss = SpreadsheetApp.getActiveSpreadsheet(); ``` if (data.type === 'roadmap') { var sheet = ss.getSheetByName('Roadmap') || ss.insertSheet('Roadmap'); sheet.clearContents(); var headers = ['Phase','Block ID','Task Name','Status','Due Date','Duration','Hours','Notes','Last Updated']; sheet.getRange(1, 1, 1, headers.length).setValues([headers]); sheet.getRange(1, 1, 1, headers.length) .setBackground('#C8871A').setFontColor('#1C1A18').setFontWeight('bold'); if (data.tasks && data.tasks.length > 0) { var rows = data.tasks.map(function(t) { return [t.phase||'', t.id||'', t.name||'', t.status||'todo', t.dueDate||'', t.duration||'', t.hours||0, t.notes||'', new Date().toISOString()]; }); sheet.getRange(2, 1, rows.length, headers.length).setValues(rows); } } if (data.type === 'activity') { var log = ss.getSheetByName('Activity Log') || ss.insertSheet('Activity Log'); if (log.getLastRow() === 0) { log.getRange(1,1,1,4).setValues([['Timestamp','Task ID','Action','Notes']]); log.getRange(1,1,1,4).setBackground('#C8871A').setFontColor('#1C1A18').setFontWeight('bold'); } log.appendRow([new Date().toISOString(), data.taskId, data.action, data.notes||'']); } return ContentService.createTextOutput(JSON.stringify({success:true})) .setMimeType(ContentService.MimeType.JSON); ``` } catch(err) { return ContentService.createTextOutput(JSON.stringify({success:false,error:err.message})) .setMimeType(ContentService.MimeType.JSON); } }
3
Deploy as Web App
Click Deploy → New Deployment. Type: Web App. Execute as: Me. Who has access: Anyone. Click Deploy and copy the URL.
4
Enter your Apps Script URL
Paste your deployment URL below and click Save. The dashboard will sync automatically on every task update.
```
Sync Log
No sync events yet.
```
Cloudflare Access Security
Protect this dashboard with your Cloudflare account
```
How this works: Cloudflare Access acts as an identity-aware proxy in front of your dashboard. Anyone visiting the URL is redirected to a Cloudflare login page. Only email addresses you approve can access the site — no passwords to manage, no backend auth code. Works with Google, GitHub, or one-time email PINs.
Step-by-Step: Hosting + Cloudflare Access
1
Host the dashboard file
Upload index.html to one of these options (choose one):
Option A — Cloudflare Pages (recommended, free): ``` 1. Go to dash.cloudflare.com → Workers & Pages → Pages 1. Click “Create a project” → “Direct Upload” 1. Upload your index.html file 1. Your site gets URL: https://bourbon-dashboard.pages.dev 1. Add custom domain if desired (e.g., dev.yourapp.com) Option B — Any static host (Vercel, Netlify, GitHub Pages): 1. Upload index.html to your preferred host 1. Get the public URL 1. Then proceed to Cloudflare Access steps below
```
2
Enable Cloudflare Zero Trust (Access)
In your Cloudflare dashboard:
1. Go to dash.cloudflare.com ``` 1. Click “Zero Trust” in the left sidebar 1. If first time: complete Zero Trust onboarding (free plan works) 1. Your team name will be: [yourname].cloudflareaccess.com
```
3
Create an Access Application
This is what protects your dashboard URL:
1. In Zero Trust → Access → Applications ``` 1. Click “Add an Application” 1. Select “Self-hosted” 1. Application Name: “Bourbon App Dashboard” 1. Session Duration: 24 hours (or 7 days for convenience) 1. Application Domain: your-dashboard-url.pages.dev (or your custom domain) 1. Click Next
```
4
Create an Access Policy
Who is allowed to access the dashboard:
1. Policy Name: "George Parker Only" ``` 1. Action: Allow 1. Configure Rules: - Rule: Emails → georgeparkerjr@[yourdomain].com (Add any additional authorized emails here) 1. Click Save policy
```
5
Configure Identity Provider (Login Method)
Choose how you log in:
Option A — One-time PIN (easiest, no setup): ``` 1. Zero Trust → Settings → Authentication 1. Enable “One-time PIN” 1. Users enter their email → receive a 6-digit code 1. That’s it! No Google/GitHub credentials needed. Option B — Google (if you want Google account login): 1. Zero Trust → Settings → Authentication → Add new 1. Select Google 1. Create OAuth credentials at console.cloud.google.com 1. Add Client ID + Secret to Cloudflare 1. Authorize your Google account email in the policy
```
6
Test your secured dashboard
Visit your dashboard URL in an incognito window:
1. Open incognito/private browser window ``` 1. Go to: https://your-dashboard-url.pages.dev 1. You should see the Cloudflare Access login page 1. Enter your email → receive PIN or Google login 1. After auth → redirected to your dashboard ✓ If it’s not redirecting: check that your Pages domain matches exactly what you entered in the Access Application.
```
7
Save settings in dashboard
Enter your dashboard URL here so Google Sheets sync and settings reference the correct location:
```
Settings
Configure dashboard preferences
```
Project Info
Edit your project details
Notification Preferences
Behind Schedule Alerts
Alert when a task is past its due date
Weekly Progress Digest
Summary of tasks completed vs. planned
Auto-sync to Google Sheets
Sync data on every task status change
Data Management
```