Daily cost tracking for civil engineering
Project description
DCT-OS
Daily cost tracking, done right.
DCT-OS is a cost tracking platform built for civil engineering — project managers, site engineers, and contractors who need to track daily costs without fighting enterprise software. SQLite-backed, self-hostable, and ready to deploy.
Features
- Project and cost code management
- Daily docket entry with resource rate lookups
- PDF-assisted manual entry (PDF viewer + form side-by-side)
- Project summary, cost code breakdown, and supplier spend reports
- CSV and Excel export
- REST API for all operations
- Single binary or
pip install— runs anywhere
Installation (Windows)
You only need to do this once. After that, DCT-OS starts automatically every time you turn on your computer.
Option A: Let Claude do it
If you have Claude Code installed, open it and paste this:
Install DCT-OS for me. Run: pip install dct-os, then run: dct-os install.
If Python isn't installed, download and install it from python.org first
(make sure "Add Python to PATH" is ticked). After install, run: dct-os
to start it and open the browser.
Claude will handle the rest. Once it's done, bookmark http://localhost:5000 and you're set.
Option B: Do it yourself
Step 1: Install Python
- Go to python.org/downloads
- Click the big yellow Download Python button
- Run the installer
- Important: Tick the box that says "Add Python to PATH" at the bottom of the first screen
- Click Install Now and wait for it to finish
Step 2: Install DCT-OS
- Press the Windows key, type
cmd, and press Enter to open a command prompt - Type the following and press Enter:
pip install dct-os
Wait for it to finish (you'll see some download progress, then it returns to the blinking cursor).
- Type the following and press Enter:
dct-os install
You'll see a confirmation message. That's it. You're done with the command prompt and can close it.
Step 3: Start DCT-OS
Type the following and press Enter:
dct-os
Your browser will open to DCT-OS with demo data loaded. Have a click around.
From now on, DCT-OS starts automatically when you log in to Windows. No command prompt needed. Just open your browser and go to:
Tip: Bookmark that address. It's your DCT-OS.
Updating
When a new version is available, a banner will appear at the top of DCT-OS. To update:
- Open a command prompt (Windows key, type
cmd, Enter) - Type:
pip install --upgrade dct-os
- Close the command prompt. DCT-OS will use the new version next time it starts.
Your data is never touched during updates.
Uninstalling
To stop DCT-OS from starting automatically (your data is kept):
dct-os uninstall
To fully remove:
pip uninstall dct-os
Your database stays in your user folder at %LOCALAPPDATA%\DCT-OS\ unless you delete it manually.
Quick Start (for developers)
pip install dct-os
dct-os
Your browser opens automatically to http://localhost:5000. Demo data loads on first run.
Auto-start on Windows
dct-os install # creates a silent startup entry
dct-os uninstall # removes it (keeps your data)
Install from source
git clone https://github.com/h3ylis/dct-os.git
cd dct-os
pip install -e .
dct-os
Options
| Environment variable | Default | Description |
|---|---|---|
DCT_PORT |
5000 |
Server port |
DCT_HOST |
127.0.0.1 |
Bind address |
DCT_DATA_DIR |
. (current dir) |
Where to store the database |
DCT_NO_SEED |
unset | Set to 1 to start with an empty database |
Licence and Use
DCT-OS is released under the Business Source License 1.1.
What this means:
- Free for internal use — engineers, contractors, and organisations running it for their own cost tracking. Modify it, deploy it internally, use it on every project. No cost, no limits, no phone-home.
- Commercial licence required for hosted or embedded use — if you're offering DCT-OS to third parties as a service, bundling it into a product you sell, or reselling it, you need a commercial licence.
- Converts to Apache 2.0 after four years per release — every version eventually becomes fully open under the Apache Licence.
See LICENSING.md for the full breakdown of what's free and what needs a commercial licence.
For commercial licensing enquiries: astral2@gmx.de
Contributing
We welcome contributions. A Contributor Licence Agreement (CLA) is being configured — please open an issue for discussion before submitting pull requests.
See CONTRIBUTING.md for details.
Contact
- Commercial licensing: astral2@gmx.de
- Bug reports and feature requests: GitHub Issues
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file dct_os-0.2.0.tar.gz.
File metadata
- Download URL: dct_os-0.2.0.tar.gz
- Upload date:
- Size: 52.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2865ba9af4e15bd188783a8cafb7b10c341a031a694390dfc43436ce0313568e
|
|
| MD5 |
28875ced751e1fa349464d73eeda3991
|
|
| BLAKE2b-256 |
b510d0dd279a98786f2298f90f9584de99de02d4877d91926fe41b811ed65804
|
Provenance
The following attestation bundles were made for dct_os-0.2.0.tar.gz:
Publisher:
publish.yml on h3ylis/dct-os
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dct_os-0.2.0.tar.gz -
Subject digest:
2865ba9af4e15bd188783a8cafb7b10c341a031a694390dfc43436ce0313568e - Sigstore transparency entry: 1759232082
- Sigstore integration time:
-
Permalink:
h3ylis/dct-os@ef524fb788c33ab75661589898fa16b98f26062d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/h3ylis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ef524fb788c33ab75661589898fa16b98f26062d -
Trigger Event:
push
-
Statement type:
File details
Details for the file dct_os-0.2.0-py3-none-any.whl.
File metadata
- Download URL: dct_os-0.2.0-py3-none-any.whl
- Upload date:
- Size: 53.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
69d7d834bb6b1548006aa1e5afbb20faa7f38ef70317ea22147bf695b9b0b02c
|
|
| MD5 |
54994a42c8ccac76c6b8388aefea1c08
|
|
| BLAKE2b-256 |
9f2cdc2d3c3006a4fdf2c0bc0debcd32622a8416acf14a715e095c1f71df836e
|
Provenance
The following attestation bundles were made for dct_os-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on h3ylis/dct-os
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
dct_os-0.2.0-py3-none-any.whl -
Subject digest:
69d7d834bb6b1548006aa1e5afbb20faa7f38ef70317ea22147bf695b9b0b02c - Sigstore transparency entry: 1759232160
- Sigstore integration time:
-
Permalink:
h3ylis/dct-os@ef524fb788c33ab75661589898fa16b98f26062d -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/h3ylis
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@ef524fb788c33ab75661589898fa16b98f26062d -
Trigger Event:
push
-
Statement type: