Skip to content
View Saeidshahriari's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report Saeidshahriari

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
Saeidshahriari/README.md

Hi there, I'm Saeid Shahriari πŸ‘‹

Data & MLOps Engineer | Building resilient data pipelines, scalable stream-processing systems, and secured lakehouse platforms where data quality is enforced, not assumed.


πŸ› οΈ Core Technologies & Tools

Languages

Python SQL Java Bash

Data Engineering & Streaming

Apache Spark Apache Airflow Apache Kafka Apache Flink Debezium Parquet

Storage & Query

PostgreSQL DuckDB Redis OpenSearch

MLOps & Security

scikit-learn MLflow HashiCorp Vault OWASP

Platform & Serving

Docker GitHub Actions FastAPI Streamlit


πŸš€ Key Architectural Projects

⚑ ETRM Data Platform (Energy Trading & Risk Management)

A secured medallion lakehouse for European energy trading, with seven security layers and an unsupervised market-abuse surveillance model.

  • Tech: Airflow 3 | Spark 4 | PostgreSQL 16 | Vault | scikit-learn | MLflow | DuckDB | Streamlit | Docker
  • Architecture Highlights:
    • Medallion lakehouse: Bronze (raw JSON) to Silver (typed, deduplicated) to Gold (PnL, counterparty exposure, portfolio summary), all in Parquet.
    • MLSecOps, layers A to G: gitleaks, Bandit, Semgrep, pip-audit, Trivy, Hadolint, Checkov and OWASP ZAP in CI, plus a data-poisoning gate that runs on live data inside the pipeline.
    • Data as an attack surface: every incoming string is scanned for SQL, script, path-traversal and prompt injection, because the data is later shown to an LLM agent.
    • Quarantine, do not crash: bad rows are set aside rather than failing the run, so a single poisoned value cannot become a denial-of-service.
    • REMIT surveillance model: Isolation Forest, unsupervised because real market abuse is rare and unlabelled. 3/3 planted abuse patterns detected, 5% false-positive rate, and every alert carries a human-readable reason.
    • Found a real bug in production data: the poisoning gate caught an ingestion filter that was fetching grid load in MW instead of price in EUR/MWh. Code review had missed it.

πŸ“„ Intelligent Document Extraction Pipeline (Belgian Gazette Deeds)

  • Focus: Risk-first PDF ingestion, OCR, LLM extraction with Gemini 2.5 Flash, and relational PostgreSQL modeling.
  • Architecture Highlights:
    • Risk-First Prototyping: Validated OCR to LLM JSON to Pydantic schema workflow before database design.
    • Complex Entity Relational Mapping: Handled multi-notice PDF complexity by decoupling documents, deeds, companies, and party_roles.
    • Resilience & Idempotency: SHA-256 file hashing for duplicate detection, and exponential backoff retry logic (tenacity) for LLM rate limits.
    • Serving Layer: Clean REST endpoints via FastAPI for business decision-maker lookup and enterprise querying.
  • Focus: Change Data Capture pipeline for real-time analytics.
  • Tech: Kafka | Flink SQL | Debezium | Redis | OpenSearch | Docker
  • Focus: Dynamic masking, HMAC tokenization, and GDPR-compliant sanitized schema generation.
  • Tech: PostgreSQL | Python | Docker | Privacy Engineering

πŸ“ˆ Engineering Philosophy

  • Risk-First Development: Tackle the hardest unknowns, such as data quality and extraction variance, before writing infrastructure code.
  • Data Integrity Over Volume: Schema validation, idempotency and explicit error handling come before scaling batch sizes.
  • Trust Nothing Upstream: Treat incoming data as an attack surface, not just as input. Validate ranges, scan for injection, and quarantine instead of crashing.
  • Root Cause Over Workaround: Verify each fix before moving to the next step. A symptom that disappears is not the same as a cause that is understood.
  • Clear System Boundaries: Keep API boundaries clean, avoiding heavy pipeline dependencies in lightweight serving containers.

πŸ“« Get in touch

LinkedIn Website Sponsor

Location Open to

β˜• If a project here (or one of my data-engineering tutorials) saved you time, buying me a coffee helps me keep building and writing.


πŸ“ˆ Live System Status

Dynamic Profile Status

Pinned Loading

  1. music-genre-classification music-genre-classification Public

    Music genre classification on GTZAN dataset using MFCC+SVM/MLP and CNN on mel-spectrograms

    Python

  2. MLOps-Project MLOps-Project Public

    Built a production-ready MLOps-style fraud detection service for payment transactions. Implemented a FastAPI inference API with monitoring and ML experiment tracking. Integrated Prometheus + Grafan…

    Python

  3. ELT-Pipeline-dbt-Snowflake-Airflow- ELT-Pipeline-dbt-Snowflake-Airflow- Public

    ELT pipeline: Snowflake + dbt transformations + Airflow orchestration (Cosmos) with data quality tests.

    Python

  4. End-to-End-Real-Time-Food-Delivery-Platform End-to-End-Real-Time-Food-Delivery-Platform Public

    End-to-end data pipeline: PostgreSQL CDC (Debezium) β†’ Kafka β†’ Flink SQL β†’ OpenSearch (search) + Redis (features). Local Docker stack, sample data, and verification scripts.

    Python

  5. postgres-anonymizer-streaming postgres-anonymizer-streaming Public

    PostgreSQL Anonymizer demo: dynamic masking + real-time sanitized streaming via triggers + static anonymization.

    PLpgSQL

  6. Breast-Cancer-Project--ML_Project Breast-Cancer-Project--ML_Project Public

    TAI (VUB) β€” Breast cancer MC classification (micro-CT, patient-wise split, classical ML)

    Jupyter Notebook