Skip to content

Easy, minimal, PDF-able data reports with python and markdown

License

Notifications You must be signed in to change notification settings

oliverlambson/bored-charts

Repository files navigation

bored-charts

Build easy, minimal, PDF-able data reports with markdown and python.

Roadmap

  • custom figures for individual reports using path parameters
  • dynamic figure sizing using flexbox
  • installable as a framework
  • example project
  • separate pyproject.toml for lib and example
  • publish to pypi
  • less boilerplate to register figure endpoints
    • @bored_router.chart decorator
    • allow decoration of functions that return figures directly
  • make report_name path parameter optional
  • altair figures as html
  • matplotlib figures as png (drop mpld3)
  • allow nested pages for grouping reports
  • matplotlib figures as svg?
  • support python 3.10, 3.11
  • make plotting libraries optional
  • pdf exports with selenium in headless mode
  • ability to archive reports (export to static html, move to archive directory, still serve from archive directory, but can get rid of analysis—could just be archive endpoints for figures?)
  • cli? (boredcharts init, boredcharts export [report], boredcharts dev, boredcharts serve)
  • deploy to bored-charts-example.oliverlambson.com
  • dashboard layout with tighter grid layout
  • example with database
  • example with authentication

Usage

See bored-charts/README.md (you're currently reading the development README).

Development

You'll need uv. (and node for linting/formatting, sorry)

make env  # you need uv & node for this
make test
make lint
make fmt

I recommend running the full example project to see how everything fits together:

cd examples/full
make dev

Built with

Alternatives

Inspired by evidence.dev, observable framework, and rill, but: (1) I wanted to use python for data analysis and charting, (2) I didn't want a static site, and (3) I didn't want to pay for deployment.

You could also achieve something similar with pandoc and nbconvert, see examples/_alternatives for more.