A production-style local data platform built with modern data engineering tools. This project simulates a real-world ELT pipeline, from raw data ingestion through transformation and orchestration, using the same stack used in professional data engineering teams.
Raw Data
│
▼
[dlt] ──────────── Ingestion (Python-based ELT pipelines)
│
▼
[PostgreSQL] ────── Local Data Warehouse (Docker)
│
▼
[dbt] ──────────── Transformations (Staging → Marts)
│
▼
[Dagster] ─────── Orchestration & Asset Lineage
| Layer | Tool |
|---|---|
| Ingestion | dlt (data load tool) |
| Warehouse | PostgreSQL 16 (via Docker) |
| Transformation | dbt (dbt-postgres) |
| Orchestration | Dagster + dagster-dbt |
| Dependency Mgmt | uv |
| SQL Linting | SQLFluff |
| Testing | pytest |
data-platform-forge/
├── .dlt/ # dlt pipeline configuration
├── dbt/
│ └── dbt_project/ # dbt models (staging, marts)
├── scripts/
│ └── init-warehouse.sql # PostgreSQL schema initialization
├── src/
│ └── data_platform/
│ └── orchestrator/ # Dagster definitions and assets
├── tests/
│ └── orchestrator/ # pytest test suite
├── docker-compose.yml # PostgreSQL warehouse container
├── pyproject.toml # Project dependencies (uv)
├── Makefile # Common dev commands
├── .sqlfluff # SQL linting config
└── .env # Environment variables (not committed)
git clone https://github.com/shahidmalik4/data-platform-forge.git
cd data-platform-forgeCopy the example and fill in your values:
cp .env.example .envRequired variables:
POSTGRES_USER=your_user
POSTGRES_PASSWORD=your_password
POSTGRES_DB=your_db
POSTGRES_PORT=5432make initdocker compose up -dThis spins up a PostgreSQL 16 container and runs scripts/init-warehouse.sql to initialize the schema.
make run-dltLoads raw data into the warehouse using dlt pipelines.
make dbt-runTransforms raw data through staging and mart layers.
make dbt-testmake dagsterVisit http://localhost:3000 to view asset lineage, run pipelines, and monitor jobs.
| Command | Description |
|---|---|
make init |
Install dependencies and sync uv |
make dagster |
Start Dagster dev server |
make run-dlt |
Run dlt ingestion pipelines |
make dbt-run |
Run dbt models |
make dbt-test |
Run dbt data quality tests |
make lint |
Run ruff and black linters |
make format |
Auto-format code with black |
make clean |
Remove temp files and dbt artifacts |
This project uses SQLFluff with the dbt templater to enforce consistent SQL style across all models.
uv run sqlfluff lint dbt/dbt_projectuv run pytestTests live in tests/orchestrator/ and cover Dagster asset definitions.