Skip to main content

A modern, opinionated full-stack CookieCutter project template that prioritizes developer experience and cutting-edge tools.

Project description

Gatlen's Opinionated Template (GOTem)

Cutting-edge, opinionated, and ambitious project builder for power users and researchers.

PyPI - Versiontests Uses the Cookiecutter Data Science project upstream uv GitHub stars

[!WARNING] Not yet ready for production!

GOTem Logo
Gatlen's Opinionated Template
(Logo = CookieCutter + Gatlen's Stylistic Motif - The Troublesome Goose)

GOTem is forked from (and synced with) CookieCutter Data Science (CCDS) V2, one of the most popular, flexible, and well maintained Python templates out there. GOTem extends CCDS with carefully selected defaults, dependency stack, customizations, additional features (that I maybe should have spent time contributing to the original project), and contemporary best practices. Ready for not just data science but also general Python development, research projects, and academic work.

Key Features

  • ๐Ÿš€ Modern Tooling & Living Template โ€“ Start with built-in support for UV, Ruff, FastAPI, Pydantic, Typer, Loguru, and Polars so you can tackle cutting-edge Python immediately. Template updates as environment changes.
  • ๐Ÿ™Œ Instant Git & CI/CD โ€“ Enjoy automatic repo creation, branch protections, and preconfigured GitHub Actions that streamline your workflow from day one.
  • ๐Ÿค Small-Scale to Scalable โ€“ Ideal for solo projects or small teams, yet robust enough to expand right along with your growth.
  • ๐Ÿƒโ€โ™‚๏ธ Start Fast, Stay Strong โ€“ Encourages consistent structure, high-quality code, and minimal friction throughout your projectโ€™s entire lifecycle.
  • ๐ŸŒ Full-Stack + Rare Boilerplates โ€“ Covers standard DevOps, IDE configs, and publishing steps, plus extra setups for LaTeX assignments, web apps, CLI tools, and moreโ€”perfect for anyone seeking a โ€œone-stopโ€ solution.

Who is this for?

CCDS is white bread: simple, familiar, unoffensive, and waiting for your choice of toppings. GOTem is the expert-crafted and opinionated โ€œeverything burger,โ€ fully loaded from the start for any task you want to do (so long as you want to do it in a specific way). Some of the selections might be an acquired taste and users are encouraged to leave them off as they start and perhaps not all will appreciate my tastes even with time, but it is the setup I find *delicious*.

โœ… Use GOTem ifโ€ฆ โŒ Might Not Be for You ifโ€ฆ
๐Ÿ” You Want the โ€œEverything Burgerโ€
- Youโ€™re cool with an opinionated, โ€œfully loadedโ€ setup, even if you donโ€™t use all the bells and whistles up front.
- You love having modern defaults (FastAPI, Polars, Loguru). at the ready for any case life throws at you from school work to research to websites
๐Ÿ›ฃ๏ธ Youโ€™re a Minimalist
- You prefer the bare bones or โ€œdefaultโ€ approach.
- GOTemโ€™s many integrations and new libraries feel too โ€œextraโ€ or opinionated for you, adding more complexity than you want. When you really just want to "get the task done".
๐ŸŽ“ Youโ€™re a Learner / Explorer
- You like experimenting with cutting-edge tools (Polars, Typer, etc.) even if theyโ€™re not as common.
- โ€œModern Over Ubiquitousโ€ libraries excite you.
๐Ÿ•ฐ๏ธ Youโ€™re a Legacy Lover
- Tried-and-true frameworks (e.g., Django, Pandas, standard logging) give you comfort.
- Youโ€™d rather stick to old favorites than wrestle with fresh tech that might be less documented.
๐Ÿ‘จโ€๐Ÿ’ป Youโ€™re a Hacker / Tinkerer
- You want code thatโ€™s as sexy and elegant as it is functional.
- You love tinkering, customizing, and โ€œpretty colorsโ€ that keep the ADHD brain wrinkled.
๐Ÿ”Ž Youโ€™re a Micro-Optimizer
- You need to dissect every configuration before even starting.
- GOTemโ€™s โ€œAspirational Over Practicalโ€ angle might make you wary of unproven or cutting-edge setups.
โšก Youโ€™re a Perfection & Performance Seeker
- You enjoy pushing Pythonโ€™s boundaries in speed, design, and maintainability.
- You're always looking for the best solution, not just quick patches.
๐Ÿ›๏ธ You Need Old-School Stability
- You want a large, established user base and predictable release cycles.
- You get uneasy about lesser-known or younger libraries that might break your production environment.
๐Ÿƒโ€โ™‚๏ธ Youโ€™re a Quick-Start Enthusiast
- You want a template that practically configures itself so you can jump in.
- You like having robust CI/CD, Git setup, and docs all done for you.
๐Ÿšถโ€โ™‚๏ธ You Prefer Slow, Manual Setups
- You donโ€™t mind spending time creating everything from scratch for each new project.
- Doing things the classic or โ€œofficialโ€ way is more comfortable than using โ€œopinionatedโ€ shortcuts.

If the right-hand column describes you better, CookieCutter Data Science (CCDS) or another minimal template might be a better fit.

View the full documentation here โžก๏ธ


Getting Started

โšก๏ธ With UV (Recommended)

uv tool install gatlens-opinionated-template

# From the parent directory where you want your project
uvx --from gatlens-opinionated-template gotem
๐Ÿ“ฆ With Pipx
pipx install gatlens-opinionated-template

# From the parent directory where you want your project
gotem
๐Ÿ With Pip
pip install gatlens-opinionated-template

# From the parent directory where you want your project
gotem

The resulting directory structure

The directory structure of your new project will look something like this (depending on the settings that you choose):

๐Ÿ“ .
โ”œโ”€โ”€ โš™๏ธ .cursorrules                    <- LLM instructions for Cursor IDE
โ”œโ”€โ”€ ๐Ÿ’ป .devcontainer                   <- Devcontainer config
โ”œโ”€โ”€ โš™๏ธ .gitattributes                  <- GIT-LFS Setup Configuration
โ”œโ”€โ”€ ๐Ÿง‘โ€๐Ÿ’ป .github
โ”‚   โ”œโ”€โ”€ โšก๏ธ actions
โ”‚   โ”‚   โ””โ”€โ”€ ๐Ÿ“ setup-python-env       <- Automated python setup w/ uv
โ”‚   โ”œโ”€โ”€ ๐Ÿ’ก ISSUE_TEMPLATE             <- Templates for Raising Issues on GH
โ”‚   โ”œโ”€โ”€ ๐Ÿ’ก pull_request_template.md   <- Template for making GitHub PR
โ”‚   โ””โ”€โ”€ โšก๏ธ workflows
โ”‚       โ”œโ”€โ”€ ๐Ÿš€ main.yml               <- Automated cross-platform testing w/ uv, precommit, deptry,
โ”‚       โ””โ”€โ”€ ๐Ÿš€ on-release-main.yml    <- Automated mkdocs updates
โ”œโ”€โ”€ ๐Ÿ’ป .vscode                        <- Preconfigured extensions, debug profiles, workspaces, and tasks for VSCode/Cursor powerusers
โ”‚   โ”œโ”€โ”€ ๐Ÿš€ launch.json
โ”‚   โ”œโ”€โ”€ โš™๏ธ settings.json
โ”‚   โ”œโ”€โ”€ ๐Ÿ“‹ tasks.json
โ”‚   โ””โ”€โ”€ โš™๏ธ '{{ cookiecutter.repo_name }}.code-workspace'
โ”œโ”€โ”€ ๐Ÿ“ data
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ external                      <- Data from third party sources
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ interim                       <- Intermediate data that has been transformed
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ processed                     <- The final, canonical data sets for modeling
โ”‚   โ””โ”€โ”€ ๐Ÿ“ raw                           <- The original, immutable data dump
โ”œโ”€โ”€ ๐Ÿณ docker                            <- Docker configuration for reproducability
โ”œโ”€โ”€ ๐Ÿ“š docs                              <- Project documentation (using mkdocs)
โ”œโ”€โ”€ ๐Ÿ‘ฉโ€โš–๏ธ LICENSE                           <- Open-source license if one is chosen
โ”œโ”€โ”€ ๐Ÿ“‹ logs                              <- Preconfigured logging directory for
โ”œโ”€โ”€ ๐Ÿ‘ทโ€โ™‚๏ธ Makefile                          <- Makefile with convenience commands (PyPi publishing, formatting, testing, and more)
โ”œโ”€โ”€ ๐Ÿš€ Taskfile.yml                    <- Modern alternative to Makefile w/ same functionality
โ”œโ”€โ”€ ๐Ÿ“ notebooks                         <- Jupyter notebooks
โ”‚   โ”œโ”€โ”€ ๐Ÿ““ 01_name_example.ipynb
โ”‚   โ””โ”€โ”€ ๐Ÿ“ฐ README.md
โ”œโ”€โ”€ ๐Ÿ—‘๏ธ out
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ features                      <- Extracted Features
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ models                        <- Trained and serialized models
โ”‚   โ””โ”€โ”€ ๐Ÿ“š reports                       <- Generated analysis
โ”‚       โ””โ”€โ”€ ๐Ÿ“Š figures                   <- Generated graphics and figures
โ”œโ”€โ”€ โš™๏ธ pyproject.toml                     <- Project configuration file w/ carefully selected dependency stacks
โ”œโ”€โ”€ ๐Ÿ“ฐ README.md                         <- The top-level README
โ”œโ”€โ”€ ๐Ÿ”’ secrets                           <- Ignored project-level secrets directory to keep API keys and SSH keys safe and separate from your system (no setting up a new SSH-key in ~/.ssh for every project)
โ”‚   โ””โ”€โ”€ โš™๏ธ schema                         <- Clearly outline expected variables
โ”‚       โ”œโ”€โ”€ โš™๏ธ example.env
โ”‚       โ””โ”€โ”€ ๐Ÿ”‘ ssh
โ”‚           โ”œโ”€โ”€ โš™๏ธ example.config.ssh
โ”‚           โ”œโ”€โ”€ ๐Ÿ”‘ example.something.key
โ”‚           โ””โ”€โ”€ ๐Ÿ”‘ example.something.pub
โ””โ”€โ”€ ๐Ÿšฐ '{{ cookiecutter.module_name }}'  <- Easily publishable source code
    โ”œโ”€โ”€ โš™๏ธ config.py                     <- Store useful variables and configuration (Preset)
    โ”œโ”€โ”€ ๐Ÿ dataset.py                    <- Scripts to download or generate data
    โ”œโ”€โ”€ ๐Ÿ features.py                   <- Code to create features for modeling
    โ”œโ”€โ”€ ๐Ÿ“ modeling
    โ”‚   โ”œโ”€โ”€ ๐Ÿ __init__.py
    โ”‚   โ”œโ”€โ”€ ๐Ÿ predict.py               <- Code to run model inference with trained models
    โ”‚   โ””โ”€โ”€ ๐Ÿ train.py                 <- Code to train models
    โ””โ”€โ”€ ๐Ÿ plots.py                     <- Code to create visualizations

Contributing โค๏ธ

If you plan major changes, consider upstreaming them to CookieCutter Data Science (CCDS). For minor fixes or adjustments to GOTem, submit an issue or pull request here. See CONTRIBUTING.md for more details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gatlens_opinionated_template-0.0.6.tar.gz (22.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gatlens_opinionated_template-0.0.6-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file gatlens_opinionated_template-0.0.6.tar.gz.

File metadata

File hashes

Hashes for gatlens_opinionated_template-0.0.6.tar.gz
Algorithm Hash digest
SHA256 6c70a1648d4772fcd1dd558d2d25902e5bd661a929e81703916f8dc7fedf7372
MD5 462ea14950dbe482675d1c7dcf095681
BLAKE2b-256 978a66c5d53082e70a46b348d56d039322db864a2bed8db8c748125b71121234

See more details on using hashes here.

File details

Details for the file gatlens_opinionated_template-0.0.6-py3-none-any.whl.

File metadata

File hashes

Hashes for gatlens_opinionated_template-0.0.6-py3-none-any.whl
Algorithm Hash digest
SHA256 8b5f804189b64fb618ee6a4eeef7278a868f4487aeb2c81f882a39c9d3d168e0
MD5 350c02e7554f976886c333328dd7abcb
BLAKE2b-256 8e8326ffacef9de1cac83eda2c5f03a60b4ca56d1da512310e53801f80a53800

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page