built out personal preferences for AI tools
This commit is contained in:
116
preferences/project-structure.md
Normal file
116
preferences/project-structure.md
Normal file
@@ -0,0 +1,116 @@
|
||||
# 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:**
|
||||
```yaml
|
||||
---
|
||||
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/
|
||||
```
|
||||
Reference in New Issue
Block a user