🌲 Forest Focus

Notion
🪙 0

Today's Tasks

📋

Configure Notion in Settings,
then click Refresh

Or add task manually
Pick a task

Time Reports

Time by Category
Planning Accuracy (avg min over/under)
Daily Hours Focused
Insights
Session Log

Each workspace can point to a different Notion database. Leave DB ID blank to use the default above.

Notion's API doesn't allow browser apps to call it directly (a security rule called CORS). A free Cloudflare Worker acts as a relay — you set it up once in ~2 minutes.

  1. Go to workers.cloudflare.com → sign up free → click Create Worker
  2. Delete the default code, paste the script below
  3. Click Deploy → copy the worker URL (e.g. https://my-worker.workers.dev)
  4. Paste that URL into the Proxy URL field on the left
Worker script:
export default { async fetch(request) { if (request.method === 'OPTIONS') { return new Response(null, { headers: { 'Access-Control-Allow-Origin': '*', 'Access-Control-Allow-Headers': '*', 'Access-Control-Allow-Methods': 'GET,POST,PATCH,PUT,DELETE,OPTIONS' }}); } const url = new URL(request.url); const notionUrl = 'https://api.notion.com' + url.pathname + url.search; const res = await fetch(notionUrl, { method: request.method, headers: request.headers, body: ['GET','HEAD'].includes(request.method) ? undefined : request.body, }); const out = new Response(res.body, res); out.headers.set('Access-Control-Allow-Origin', '*'); out.headers.set('Access-Control-Allow-Headers', '*'); return out; } }
  1. In your Notion database, add these fields (if not already present):
    Estimated (Number, unit: minutes) • Actual (Number) • Category (Select: Meeting, Research, Preparation, Admin, Development, Review) • Status (Status: default — or Select with Todo/In Progress/Done)
  2. Go to notion.so/my-integrations → New integration → copy the token → paste it on the left
  3. In your database: Share → Invite your integration