Files
AI/preferences/project-structure.md

2.8 KiB

Standard Project Structures

PowerShell / WPF Application

For IT tooling and local GUI applications.

ProjectName/
├── ProjectName.ps1           # Main entry point — UI, startup, STA check
├── company-settings.psd1     # External config — no credentials
├── README.md
├── Modules/
│   └── ProjectName.psm1     # Shared functions, config loading, helpers
├── Tests/
│   └── *.Tests.ps1          # Pester test files
└── Release-Notes/
    ├── v1.0.md
    └── v1.1.md

Rules:

  • Entry .ps1 handles: STA check, assembly loading, module import, config load, show window
  • All reusable logic lives in the .psm1 module, not inline in the entry point
  • Config file is always in the same directory as the script
  • Release-Notes/ uses one file per version: v{major}.{minor}.md

FastAPI Web Application (Docker Compose)

For self-hosted web apps running behind Nginx.

project-name/
├── docker-compose.yml
├── .env.example              # Always committed — placeholder values only
├── .gitignore                # Must include .env
├── README.md
├── nginx/
│   └── default.conf
└── backend/
    ├── Dockerfile
    ├── requirements.txt
    └── app/
        ├── main.py
        ├── config.py
        ├── database.py
        ├── dependencies.py
        ├── models/
        │   └── user.py
        ├── schemas/
        │   └── user.py
        ├── routers/
        │   ├── auth.py
        │   └── [resource].py
        ├── utils/
        └── tests/
            └── test_[resource].py

Rules:

  • .env is never committed — .env.example always is
  • Each resource (users, items, etc.) gets its own model, schema, and router file
  • Tests live inside backend/app/tests/

Hugo Blog (chns.tech)

Static site for tech blog posts.

site/
├── hugo.toml                 # Site config
├── content/
│   └── posts/
│       └── YYYY-MM-DD-post-title.md
├── themes/
├── static/
└── layouts/

Post front matter standard:

---
title: "Post Title"
date: YYYY-MM-DD
draft: false
tags: ["tag1", "tag2"]
---

Git Conventions

  • Branch: Commit directly to main (solo projects)
  • Commit messages: Short imperative summary — Add user auth, Fix config loading, Update README
  • Never commit: .env, credentials, compiled binaries, node_modules, __pycache__
  • Always include a .gitignore appropriate for the project type

Standard .gitignore entries

PowerShell projects:

*.exe
company-settings.psd1   # If it contains org-specific paths

Python projects:

.env
__pycache__/
*.pyc
.pytest_cache/