Wenlan
Wenlan is a source-backed AI knowledge base and LLM wiki for AI work: organize documents and decisions into pages you can find, inspect, and review.
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Create Todoist tasks for your favorite NBA team’s regular season games.
翻訳待ち
Loading the full README.
Read the full README ↗OAuth-enabled web app that imports an NBA team's schedule into Todoist as tasks.
Todoist NBA Schedule Import connects to a user's Todoist account, lets them choose an NBA team, and imports upcoming games into either a new project or an Inbox section. It handles OAuth, session security, schedule parsing, Todoist API writes, and season lifecycle behavior.
@doist/todoist-api-typescriptcookie-session + @hapi/iron for token handlingapp/
routes/
index.js # GET / (landing page)
setup.js # GET /setup (team picker) + POST /setup (runs the import)
result.js # GET /result (how the import went)
auth/ # OAuth login/callback
utils/
todoist.js # Todoist API operations
cookieSession.js # Encrypted token session helpers
parseSchedule.js # Schedule parsing and season-state logic
views/ # Server-rendered HTML templates
public/ # Frontend JS (entry: scripts/main.js), CSS, images
tests/ # Unit + route tests
docs/ # Architecture, testing, known issues, scrape workflow
scrape/ # Schedule scraping pipeline
data/nba_schedule.json # Canonical schedule data
/setup, which reads the team's schedule from local JSON and creates the Todoist tasks./result, which shows success (with a link to open the tasks in Todoist) or the error.Full walkthrough: docs/APP_ARCHITECTURE.md.
Use .env.local (see .env.example):
CLIENT_IDCLIENT_SECRETENCRYPTION_KEYCOOKIE_SECRETREDIRECT_URIENABLE_ERROR_DEMO (optional; true enables the ?mockTierCheck= and ?mockTodoistError= demos on /setup)Node 24 (pinned in .nvmrc):
npm ci
cp .env.example .env.local
Fill in Todoist OAuth credentials and secrets.
npm run dev
App runs at http://localhost:3000.
npm run dev # Local server, restarts on file changes (node --watch)
npm start # Local server, no restarts
npm test # Run tests
npm run test:coverage # Tests + coverage report in coverage/
scrape/.venv/bin/python scrape/main.py
For annual workflow and verification details, see docs/SCRAPE_INSTRUCTIONS.md.
state is random per login, tied to the browser's session, and single-use@hapi/iron) before session storagehttpOnly, secure, sameSite: Lax, 1-hour lifetimeDeliberately not done now, but worth revisiting if the constraints below change:
This project demonstrates practical product engineering: third-party OAuth integration, secure token/session handling, API reliability under external platform constraints, and a complete user-facing workflow from authentication to task creation.