{"id":25231641,"url":"https://github.com/thinknimble/tn-spa-bootstrapper","last_synced_at":"2025-10-26T07:32:53.603Z","repository":{"id":37886404,"uuid":"399221440","full_name":"thinknimble/tn-spa-bootstrapper","owner":"thinknimble","description":"A production-ready Django SPA app on Heroku in 20-min or less!","archived":false,"fork":false,"pushed_at":"2024-05-22T14:03:36.000Z","size":2597,"stargazers_count":8,"open_issues_count":44,"forks_count":9,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-05-22T14:43:09.422Z","etag":null,"topics":["bootstraping","cookiecutter","django","python","reactjs","vuejs"],"latest_commit_sha":null,"homepage":"https://tn-spa-bootstrapper-staging.herokuapp.com/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/thinknimble.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.TXT","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-23T19:13:42.000Z","updated_at":"2024-05-28T16:54:26.082Z","dependencies_parsed_at":"2023-09-28T18:14:53.451Z","dependency_job_id":"3d11068d-0ae5-452f-98b1-8d233fce3613","html_url":"https://github.com/thinknimble/tn-spa-bootstrapper","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinknimble%2Ftn-spa-bootstrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinknimble%2Ftn-spa-bootstrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinknimble%2Ftn-spa-bootstrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/thinknimble%2Ftn-spa-bootstrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/thinknimble","download_url":"https://codeload.github.com/thinknimble/tn-spa-bootstrapper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238292641,"owners_count":19448029,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstraping","cookiecutter","django","python","reactjs","vuejs"],"created_at":"2025-02-11T12:29:24.088Z","updated_at":"2025-10-26T07:32:53.598Z","avatar_url":"https://github.com/thinknimble.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://thinknimble.com\"\u003e\n    \u003cimg src=\"assets/thinknimble-logo.png\" alt=\"ThinkNimble Logo\" width=\"300\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n\u003ch1 align=\"center\"\u003eThinkNimble Bootstrapper\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/thinknimble/tn-spa-bootstrapper/actions/workflows/pytest.yml\"\u003e\u003cimg src=\"https://github.com/thinknimble/tn-spa-bootstrapper/actions/workflows/pytest.yml/badge.svg\" alt=\"Build Status\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/thinknimble/tn-spa-bootstrapper/actions/workflows/linting.yml\"\u003e\u003cimg src=\"https://github.com/thinknimble/tn-spa-bootstrapper/actions/workflows/linting.yml/badge.svg\" alt=\"Linting\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.python.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Python-3.12-3776AB\" alt=\"Python\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.djangoproject.com/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Django-4.2-092E20\" alt=\"Django\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://reactjs.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/React-18-61DAFB\" alt=\"React\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://www.typescriptlang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/TypeScript-5-3178C6\" alt=\"TypeScript\"\u003e\u003c/a\u003e\n  \u003ca href=\"https://tailwindcss.com/\"\u003e\u003cimg src=\"https://img.shields.io/badge/Tailwind-3-06B6D4\" alt=\"Tailwind\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cb\u003eShip production-ready full-stack apps in minutes, not months\u003c/b\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  The ThinkNimble Bootstrapper is a battle-tested cookiecutter template that generates a complete,\u003cbr\u003e\n  production-ready Django + React application with \u003cb\u003eAI-powered chat demo\u003c/b\u003e, authentication,\u003cbr\u003e\n  email, and deployment configurations—all following industry best practices.\u003cbr\u003e\n  \u003cbr\u003e\n  \u003cem\u003e🤖 Includes a fully-functional OpenAI chat demo with streaming responses and prompt management\u003c/em\u003e\n\u003c/p\u003e\n\n---\n\n## What You Get\n\n\u003ctable\u003e\n\u003ctr\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### Backend (Django)\n\n- **Django 4.2** with custom user model\n- **OpenAI Chat Demo** with streaming responses\n- **Comprehensive test suite** included\n- **API-first architecture** with Django REST Framework\n- **Secure by default** - SSL, CORS, CSP headers configured\n- **Email ready** - Mailgun, AWS SES, or SMTP\n- **File storage** - AWS S3 Ready\n- **Background tasks** with Django Background Tasks\n- **WebSockets** with Django Channels for real-time AI chat\n\n\u003c/td\u003e\n\u003ctd width=\"50%\" valign=\"top\"\u003e\n\n### Frontend (React)\n\n- **React 18** with TypeScript\n- **AI Chat Demo UI** - Complete chat interface component\n- **Tailwind CSS** for styling\n- **Vite** for lightning-fast builds\n- **React Router** for navigation\n- **API integration** with Axios\n- **Form handling** with react-hook-form\n- **State management** ready\n- **Mobile responsive** from day one\n\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\n### Deploy Anywhere\n\n- **Heroku** - Production-ready with Procfile included\n- **Docker** - Fully containerized for any cloud platform\n- **Flexible** - Deploy to AWS, Google Cloud, or any Docker-compatible host\n\n### Enterprise-Ready\n\n- Pre-commit hooks for code quality\n- GitHub Actions CI/CD pipelines\n- Error tracking with Rollbar/Sentry\n- Performance monitoring\n- GDPR compliance helpers\n- Comprehensive documentation\n\n### 🤖 AI Chat Demo Included\n\nExperience AI integration from day one with our fully-functional demo:\n\n- **Working OpenAI Chat** - Pre-configured demo app with GPT-3.5/4 (just add your API key)\n- **Real-time Streaming** - See WebSocket-based streaming responses in action\n- **Prompt Management** - Example of dynamic prompt templates with variable substitution\n- **Conversation Analytics** - Demo pattern detection and conversation categorization\n- **Feedback System** - Example rating system for improving AI responses\n- **Admin Interface** - Full Django admin for managing the demo's AI configuration\n- **Multiple Agent Types** - Demonstrates configurable AI agent roles\n- **Learning Style Assessment** - Complete demo showcasing an educational chatbot\n\n---\n\n## See It In Action\n\nCheck out a live deployment: **[Demo App](https://tn-spa-bootstrapper-staging.herokuapp.com/)**\n\n---\n\n## Why ThinkNimble?\n\n**Stop reinventing the wheel.** Every new project shouldn't start from scratch. The ThinkNimble Bootstrapper gives you a production-quality foundation so you can focus on what makes your app unique.\n\n- **Save weeks of setup time** - Authentication, emails, deployment, and AI demo—it's all there\n- **AI-Ready from Day One** - Skip the AI integration learning curve with our working OpenAI demo\n- **Best practices built-in** - 10+ years of production experience distilled into one template\n- **Fully customizable** - Not a framework, just a starting point you own completely\n- **Active community** - Regular updates and responsive support\n\n---\n\n## Quick Start\n\n### Fastest Way - Using [tn-cli](https://github.com/thinknimble/tn-cli)\n\nGet up and running in seconds with the ThinkNimble CLI:\n\n```bash\n# Install tn-cli (one-time setup)\ncurl -fsSL https://nimbl.sh/install | bash\n\n# Create your project\ntn new-project\n# or use the alias\ntn bootstrap\n```\n\n### Alternative - Using Cookiecutter Directly\n\nFirst, install `pipx` if you don't have it ([installation guide](https://pipx.pypa.io/stable/installation/#installing-pipx)):\n\n```bash\npipx install cookiecutter\npipx run cookiecutter gh:thinknimble/tn-spa-bootstrapper\n```\n\n## Features\n\n### Authentication \u0026 User Management\n\n- **Custom user model** with email-based authentication\n- **Token-based authentication** using Django REST Framework\n- **Password reset flows** with email verification\n- **User registration** with email confirmation\n- **User profile management** endpoints\n\n### Developer Experience\n\n- **Hot module reloading** for React development with Vite\n- **Pre-configured linting** with Ruff for Python, ESLint and Prettier for JavaScript\n- **Pre-commit hooks** for code quality enforcement\n- **Test suite** with pytest for Django and testing setup for React\n- **Type safety** with TypeScript for frontend\n- **API documentation** with Swagger/OpenAPI via drf-spectacular\n- **Docker development environment** with PostgreSQL and Redis\n\n### Production Ready\n\n- **Environment-based settings** for dev/staging/production\n- **Security headers** configured (CORS, CSP, HSTS)\n- **Error tracking** with Sentry integration (mobile) and Rollbar support\n- **Comprehensive logging** configuration\n- **Database migrations** with Django's migration system\n- **Static file handling** with WhiteNoise\n- **Email services** via Mailgun, AWS SES, or custom SMTP\n- **File storage** with S3 or Google Cloud Storage support\n\n### Built-in Features\n\n- **WebSocket support** with Django Channels for real-time features\n- **Redis integration** for caching and channel layers\n- **GitHub Actions** workflows for CI/CD\n- **Heroku deployment** configuration with Procfile\n- **PostgreSQL** as default database\n- **Mobile app support** with React Native template\n\n## Usage\n\nLet's pretend you want to create a Django project called \"therock\". Rather than using `startproject` and then editing the results to include your name, email, and various configuration issues that always get forgotten until the worst possible moment, get cookiecutter to do all the work.\n\nFollow the Quick Start above.\n\nYou'll be prompted for some values. Provide them, then a Django project will be created for you.\n\nAnswer the prompts with your own desired options. For example:\n\n    project_name [My Project]: The Rock\n    author_name [ThinkNimble]: Test Author\n    email [hello@thinknimble.com]: test@thinknimble.com\n    project_slug [the_rock]:\n    Select mail_service:\n    1 - Mailgun\n    2 - Amazon SES\n    3 - Custom SMTP\n    Choose from 1, 2, 3 [1]: 1\n    Error: \"my_project\" directory already exists\n    william@Williams-MacBook-Pro thinknimble % rm -rf my_project\n    william@Williams-MacBook-Pro thinknimble % cookiecutter git@github.com:thinknimble/tn-spa-cookiecutter.git --checkout cleanup\n    You've downloaded /Users/william/.cookiecutters/tn-spa-cookiecutter before. Is it okay to delete and re-download it? [yes]:\n    project_name [My Project]:\n    author_name [ThinkNimble]:\n    email [hello@thinknimble.com]:\n    project_slug [my_project]:\n    Select mail_service:\n    1 - Mailgun\n    2 - Amazon SES\n    3 - Custom SMTP\n    Choose from 1, 2, 3 [1]:\n\nCreate a git repo and push it there::\n\n```bash\ngit init\ngit add .\ngit commit -m \"first awesome commit\"\ngit remote set-url origin git@github.com:thinknimble/the-rock.git\ngit push -u origin main\n```\n\nNow take a look at your repo. Don't forget to carefully look at the generated README. Awesome, right?\n\n## Want to Help Us Improve the Bootstrapper?\n\nSee the [CONTRIBUTING] file for information about reporting issues, setting up your dev environment, running tests, and making pull requests.\n\n[CONTRIBUTING]: ./CONTRIBUTING.md\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthinknimble%2Ftn-spa-bootstrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthinknimble%2Ftn-spa-bootstrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthinknimble%2Ftn-spa-bootstrapper/lists"}