Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sketchy Place

Sketchy Place is a live personal scrapbook page for the things that usually get scattered across apps: runs, repositories, music, posts, projects, and trips. It turns those feeds into a hand-drawn dashboard with cached data, real-time updates, and a secured admin board for keeping the whole page curated.

Sketchy Place long screenshot

What It Shows

  • Fitness: Strava-backed mileage doodles, recent activities, activity summaries, training detail, and route/map sketches where activity geometry is available.
  • Projects: GitHub profile details, a contribution chart styled like GitHub but drawn with a looser sketchbook feel, and editable project showcase cards.
  • Music: Spotify currently-listening state, recent tracks, playlist-aware playback detail, and listening stats designed for short refresh cycles.
  • Vacations: Polaroid-style travel notes with hand-drawn place outlines, dates, and small story fragments.
  • Posts and blogs: Markdown-driven entries that can be published, hidden, edited, and arranged from the admin side.

Product Feel

The site is meant to feel like a desk covered in paper, tape, cutouts, map scribbles, and live notes.

  • Hand-drawn cards, torn-paper shadows, sketchy charts, and imperfect layout rotations.
  • A restrained orange, black, and white visual system with occasional data-specific accents.
  • Frontend updates through a Server-Sent Events stream so connected browsers can refresh when the backend detects changed content.
  • Lightweight local persistence through SQLite, so the public page remains fast even when integrations are unavailable or rate-limited.

Admin Board

The private admin panel is the control board for the site. It supports secured editing for profile content, project cards, posts, vacations, and visibility toggles. The public page reads from the cached database, while admin edits and fetch jobs publish change events for connected clients.

Integrations

Sketchy Place currently supports:

  • GitHub: public activity, profile data, repositories, and contribution calendar data.
  • Spotify: live playback, recent tracks, playlist-aware listening context, and short-interval refreshes.
  • Strava: activity ingestion, summary metrics, and route data for map doodles.

Spotify is intentionally refreshed more often than the other integrations because songs change every few minutes. GitHub can refresh through the scheduler or webhook. Strava is treated as lower-frequency activity data.

Architecture

  • server.py serves the public site, admin routes, JSON APIs, OAuth callbacks, webhooks, and /api/events.
  • static/ contains the browser app and visual system.
  • cron/ contains one-shot fetchers, OAuth helpers, and the scheduler.
  • data/sketchy_place_cache.db is the local runtime cache and content database.

Local Setup

Create local configuration:

Copy-Item .env.example .env

Edit .env and set at least:

SKETCHY_ADMIN_USERNAME=your-name
SKETCHY_ADMIN_PASSWORD=a-long-random-password

Start the site:

python server.py

Open:

http://127.0.0.1:8000

Run the integration scheduler in a second terminal:

python -B cron\scheduler.py

Run all fetchers once:

python cron/fetch_all.py

GitHub webhook target:

POST http://YOUR_PUBLIC_TUNNEL/api/webhooks/github

Set GITHUB_WEBHOOK_SECRET before enabling this endpoint. Unsigned webhooks are rejected unless SKETCHY_ALLOW_UNSIGNED_WEBHOOKS=1 is set for local testing.

OAuth helpers:

python -B cron\oauth_setup.py strava-url
python -B cron\oauth_setup.py strava-code CODE_FROM_CALLBACK
python -B cron\oauth_setup.py spotify-url
python -B cron\oauth_setup.py spotify-code CODE_FROM_CALLBACK

Supported .env variables:

  • PORT: local server port.
  • SKETCHY_ADMIN_USERNAME: admin username.
  • SKETCHY_ADMIN_PASSWORD: required admin password.
  • SKETCHY_FETCH_INTERVAL_SECONDS: legacy fallback for the GitHub scheduler interval.
  • GITHUB_FETCH_INTERVAL_SECONDS: GitHub scheduler interval; defaults to 900 seconds.
  • SPOTIFY_FETCH_INTERVAL_SECONDS: Spotify scheduler interval; defaults to 15 seconds.
  • STRAVA_FETCH_INTERVAL_SECONDS: Strava scheduler interval; defaults to 86400 seconds.
  • GITHUB_USERNAME: fetches public GitHub events and updates the GitHub widget.
  • GITHUB_TOKEN: optional token for higher GitHub API rate limits.
  • GITHUB_WEBHOOK_SECRET: HMAC secret for /api/webhooks/github.
  • LASTFM_USERNAME: labels the music widget.
  • SPOTIFY_CLIENT_ID, SPOTIFY_CLIENT_SECRET, SPOTIFY_REFRESH_TOKEN: Spotify OAuth values for current/recent playback.
  • SPOTIFY_TRACK: static fallback for the Spotify/Last.fm widget.
  • STRAVA_CLIENT_ID, STRAVA_CLIENT_SECRET, STRAVA_REFRESH_TOKEN: Strava OAuth values.
  • STRAVA_REDIRECT_URI, SPOTIFY_REDIRECT_URI: OAuth callback URLs; default to http://127.0.0.1:8000/oauth/callback.

About

Personal website template packed with a ready-to-use backend+frontend, setup scripts, CRON jobs for Github, Spotify and Strava integrations. Supports blog entries, vacations, project showcases, music activity and taste, fitness information all in a natural scrap-book theme.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages