Appcraft
  • 1. Getting Started
    • 1.1. What Is Appcraft?
    • 1.2. Why Use It
    • 1.3. Installation
    • 1.4. Starting a New Project
    • 1.5. Adding Templates to an Existing Project
  • 2. Developing Your Project
    • 2.1. Your First Run
    • 2.2. The Mental Model
    • 2.3. Which Folder Does a New Piece Go In?
    • 2.4. Configuration
    • 2.5. Interactive and Non-Interactive Runs
    • 2.6. Checking Your Work
    • 2.7. Glossary
      • 2.7.1. Recipes
        • 2.7.1.1. Add a Model
        • 2.7.1.2. Add the Schemas and Mapper
        • 2.7.1.3. Add a Repository
        • 2.7.1.4. Add a Use Case
        • 2.7.1.5. Add a Presentation Class
        • 2.7.1.6. Add a Runner
        • 2.7.1.7. Store Products in a Database
        • 2.7.1.8. Where to Go Next
  • 3. Templates
    • 3.1. Template Types
      • 3.1.1. Default Templates
      • 3.1.2. Shared-Base Templates
      • 3.1.3. Exclusive Templates
      • 3.1.4. Interchangeable Templates
      • 3.1.5. Composable Extensions
      • 3.1.6. Dependencies
      • 3.1.7. Inactive Templates
    • 3.2. Base Template
      • 3.2.1. A working project out of the box
      • 3.2.2. Resilience and developer experience
      • 3.2.3. Learning the architecture by example
      • 3.2.4. Runners
    • 3.3. Poetry Template
      • 3.3.1. Switching to Poetry
    • 3.4. Pipenv Template
      • 3.4.1. Switching to Pipenv
    • 3.5. uv Template
      • 3.5.1. Switching to uv
    • 3.6. Docker Template
      • 3.6.1. Dynamic, one service per entry point
      • 3.6.2. Building and running
      • 3.6.3. No hardcoded package manager
      • 3.6.4. Development vs. production
      • 3.6.5. One thing to set up yourself
    • 3.7. Prompt Toolkit Template
    • 3.8. SQLAlchemy Template
      • 3.8.1. What it adds
      • 3.8.2. Combining with Flask
      • 3.8.3. Runners
      • 3.8.4. Adding a Table for a New Model
    • 3.9. MongoDB Template
      • 3.9.1. What it adds
      • 3.9.2. Runners
    • 3.10. Flask Template
      • 3.10.1. Automatic routing
      • 3.10.2. Database integration
      • 3.10.3. Development vs. production
      • 3.10.4. Runner
    • 3.11. Flask UI Template
      • 3.11.1. Adding a Page
    • 3.12. Flask API Template
      • 3.12.1. Adding an API Route
    • 3.13. Web Scraping Template
      • 3.13.1. What this template provides
      • 3.13.2. Choosing an engine
      • 3.13.3. Handing off between engines
      • 3.13.4. Available runners
      • 3.13.5. Benchmarking installed engines
    • 3.14. Selenium Template
      • 3.14.1. Browser detection
      • 3.14.2. Cookies and headers
      • 3.14.3. Using Selenium specifically
    • 3.15. Playwright Template
      • 3.15.1. Async by nature
      • 3.15.2. Cookies and headers
      • 3.15.3. Using Playwright specifically
    • 3.16. HTTPX Template
      • 3.16.1. Choosing a parser
      • 3.16.2. Cookies and headers
      • 3.16.3. Using HTTPX specifically
    • 3.17. curl_cffi Template
      • 3.17.1. Why this exists alongside HTTPX
      • 3.17.2. Cookies and headers
      • 3.17.3. Using curl_cffi specifically
    • 3.18. Git Template
      • 3.18.1. What it sets up
      • 3.18.2. Setting up the branching strategy
      • 3.18.3. Branching strategy (config/git.toml)
      • 3.18.4. Feature and fix branches
      • 3.18.5. Conventional Commits
      • 3.18.6. Breaking changes
      • 3.18.7. Pausing at the end of a command
      • 3.18.8. Releases
      • 3.18.9. Cutting a major version on purpose
      • 3.18.10. Changelog
      • 3.18.11. Cleaning up merged branches
      • 3.18.12. Remote repository
      • 3.18.13. Limitations
    • 3.19. Remote Repository Template
      • 3.19.1. Commands
      • 3.19.2. Choosing the platform
      • 3.19.3. Adding a platform
    • 3.20. GitHub Template
      • 3.20.1. Requirements
      • 3.20.2. What it does
      • 3.20.3. Example
  • 4. Layered Architecture
    • 4.1. Runner Layer
      • 4.1.1. What to Do in Runners
      • 4.1.2. What to Avoid in Runners
      • 4.1.3. Types of runners
      • 4.1.4. Example of a Runner
      • 4.1.5. Running Applications
      • 4.1.6. Running Tool Runners
      • 4.1.7. Executing a Specific Runner
    • 4.2. Presentation Layer
      • 4.2.1. What belongs here
      • 4.2.2. What to avoid here
      • 4.2.3. Naming convention: <Domain>CLIPresentation
      • 4.2.4. Example: a CLI Presentation
    • 4.3. Application Layer
      • 4.3.1. What belongs here
      • 4.3.2. What to avoid here
      • 4.3.3. Naming conventions
      • 4.3.4. Example: a Port
      • 4.3.5. Example: a Repository
      • 4.3.6. Example: a Mapper and Schema
      • 4.3.7. Example: a Use Case
      • 4.3.8. Introspection use cases
    • 4.4. Domain Layer
      • 4.4.1. What belongs here
      • 4.4.2. What to avoid here
      • 4.4.3. Naming convention: a pure contract, not I + name
      • 4.4.4. Example: a domain model
      • 4.4.5. Example: a filter
    • 4.5. Infrastructure Layer
      • 4.5.1. What belongs here
      • 4.5.2. What to avoid here
      • 4.5.3. Naming convention: Adapter
      • 4.5.4. Example: the default database Adapter
      • 4.5.5. Providers
    • 4.6. Application Flow
      • 4.6.1. Request Flow
      • 4.6.2. Response Flow
  • 5. Contributing
    • 5.1. Looking for Something to Build?
    • 5.2. Creating New Templates
    • 5.3. Updating Existing Templates
    • 5.4. Translating the Framework
    • 5.5. Working in a Temporary Project
    • 5.6. Ready to Contribute?
  • 6. Changelog
    • 6.1. 1.0.0b1
      • 6.1.1. Added
      • 6.1.2. Changed
      • 6.1.3. Fixed
    • 6.2. 0.6.0b0
      • 6.2.1. Added
      • 6.2.2. Changed
      • 6.2.3. Fixed
      • 6.2.4. Removed
  • 7. Contact
  • 8. Versions
Appcraft
  • Search


© Copyright 2025, Dux Tecnologia, Thiago Costa Pereira.

Built with Sphinx using a theme provided by Read the Docs.