Skip to content
A. Natthawut / Portfolio

Engineering logic. Data-driven impact.

Hello, I’m

Natthawut (A)Rungrueangworanon

Data & Analytics Specialist | Systems Architecture & Power Platform

With a Mechanical Engineering foundation from Chiang Mai University (CMU) and experience in Business Development, I bring engineering logic to business challenges — building end-to-end data systems with SQL, Power Platform, and Power BI.

Explore Systems Architecture Power Platform / Dataverse
mindset / systems_view

Connect the whole picture

From source to strategy.

End-to-end data systemsSQL, Dataverse, and business inputs connect to a data model that supports automation and insights. SQL Dataverse Business inputs Data modelOne foundation Automate Insights COLLECTCONNECTUNDERSTAND
// My approach
engineering_logic + business_context
→ meaningful_data_solutions
Built on a foundation of Mechanical Engineering · CMU Business Development Systems Thinking

01 / Selected work

Solving for business impact.

From business systems to tools
that make everyday learning easier.

LATEST BUILD ADDED

Browser extension / AI workflow

Lecture Notes.

A study companion, right beside the lesson.

A Chrome side panel that turns lesson text, visible transcripts, and text-based PDFs into structured study notes with Gemini — then keeps those notes and their sources ready to revisit.

  • Read alongside the lesson. Keep the side panel open while studying Microsoft Learn or other supported pages.
  • Make the structure useful. Organize summaries into Key Concepts, Key Terms, and Lecture Summary.
  • Keep and export the learning. Save lessons locally, copy Markdown, and export saved lessons as Markdown or JSON.
Release
v1.4.1
Platform
Chrome 116+
Stage
Working MVP
Chrome ExtensionJavaScriptGemini APIPDF.jsLocal Storage
Explore the build
INTERFACE PREVIEWCHROME SIDE PANEL
Lecture Notes v1.4.1 interface showing a sample saved lesson, Key Concepts, Key Terms, Lecture Summary, Copy Note, and Save Lesson controls.
Actual v1.4.1 interface · sample saved lesson.
Preview of the extension installed in Chrome.
Read the case studyClose the case studyProblem, implementation, and current scope

The problem

Taking notes across online lessons, transcripts, and PDFs interrupts the reading flow. Summaries also lose value when the original text and source are difficult to find again.

What I built

A Manifest V3 extension with a persistent side panel, source extraction, Gemini summarization, a local lesson library, and portable Markdown/JSON exports.

How the pieces connect

  1. 01 / READ

    Collect the source

    Selected text, loaded transcripts, page content, or PDF.js text extraction.

  2. 02 / SUMMARIZE

    Call Gemini

    Send the extracted text after the user requests a summary, using their API key.

  3. 03 / REVIEW

    Read structured notes

    Show concepts, terminology, and a lesson summary alongside the source.

  4. 04 / KEEP

    Save and export

    Keep notes and source context in the browser. Export without another AI request.

Implementation highlights

  • Prefer selected text, then visible transcripts, before falling back to page content.
  • Read text-based PDFs with bundled PDF.js and report size or extraction limits.
  • Save notes with the source text, page title, URL, model, and timestamp.
  • Export saved lessons as Markdown or structured JSON without exporting the API key.

Current scope

Install in Chrome 116+ and supply a Gemini API key to generate summaries. Summarization sends text to Google; saved lessons stay in the current browser profile.

The MVP reads available text. It does not transcribe audio, OCR scanned PDFs, sync across devices, or import JSON backups. Model access and API usage depend on the user's Google account.

The preview uses a sample saved lesson. It demonstrates the interface and note structure; it is not a live AI demo.

LOCAL AI SYSTEMDEVELOPMENT PROTOTYPE

Document intelligence / Human review

Verity Extract.

Structured data, with human judgment.

A real-time structured data extractor for receipt and invoice images. Local vision inference, schema validation, and confidence signals feed a review queue where people verify the document before approval.

  • Extract locally. OpenCV and Tesseract prepare the document for a vision model running through Ollama.
  • Make uncertainty visible. Pydantic checks, OCR clarity, and rule deductions help explain why an extraction needs review.
  • Close the review loop. Compare the original image and JSON, edit fields, and preserve approval decisions with correction history.
PythonFastAPIPydanticOllamaOpenCVStreamlitPostgreSQL
Explore the system
REVIEW DASHBOARDSYNTHETIC SAMPLE
Verity Extract dashboard with document counts, an upload area, a review queue, and a synthetic receipt awaiting verification.
Actual dashboard interface with a synthetic receipt.
Preview data is separate from the benchmark below.

Recorded local benchmark

Receipts evaluated
100
All 3 fields match
80%
Average latency
5.008s

SROIE subset · local qwen2.5vl:7b · .
All three fields: company, date, and total (amount tolerance 0.05). All 100 documents required human review.

Read the system case studyClose the system case studyArchitecture, validation, and measured results

The problem

Receipt and invoice images contain inconsistent layouts, skew, noise, and ambiguous amounts. Turning them into usable records requires both extraction and a clear way to detect, inspect, and correct uncertain values.

The implementation

FastAPI orchestrates local preprocessing and Ollama inference. Separate receipt and invoice schemas validate structured output. SQLAlchemy stores predictions and review events, while Streamlit presents the document, JSON, confidence breakdown, and editable fields.

From image to reviewed record

  1. 01 / INGEST

    Receive the file

    Accept an image or render the first PDF page for extraction.

  2. 02 / PREPARE

    Improve the input

    Deskew, enhance contrast, sharpen, and collect local OCR text.

  3. 03 / EXTRACT

    Run local vision

    Request structured output from qwen2.5vl:7b through loopback-only Ollama.

  4. 04 / VALIDATE

    Check the result

    Apply document schemas and invoice-specific arithmetic and identifier checks.

  5. 05 / REVIEW

    Verify and record

    Keep before/after values, reviewer identity, and the approval or rejection decision.

Measured development results

Saved local benchmark on 100 SROIE receipts from 5 September 2026
MeasureResult
Company match84 / 100
Date match91 / 100
Total within 0.0591 / 100
All three fields match80 / 100
Structural validation pass63 / 100
Extraction errors5 / 100
Average latency, including failures5.008 seconds
Human review required100 / 100

What the scores mean

Confidence is an uncalibrated quality signal. The local model does not provide calibrated field probabilities, so every local-model result remains in human review even when structural validation passes.

What the benchmark covers

The saved run covers the first 100 sorted SROIE test receipts, including the earlier 20-document set. Errors are included in accuracy and latency calculations. This ordered subset limits how far the result can be generalized; independent evaluation and score calibration remain future work.

Storage and execution

The pipeline runs on the local machine. PostgreSQL is supported through Docker Compose, with SQLite as the local fallback. Review events retain original predictions and corrected values for later analysis.

Benchmark figures come from saved development reports. The dashboard screenshot uses a separate synthetic receipt and sample API responses to demonstrate the interface.

Architecture overviewPROJECT_01
PARENT TABLE

Claim_Headers

Employee · status · total

1 : N
CHILD TABLE

Claim_Details

Expense · amount · receipt

Automated approval logic
14 steps
SUBMITVALIDATEAPPROVEAUDIT

Systems architecture & automation

Enterprise Expense & Claim System Architecture

Bringing scattered expense requests into a structured system, with relational data modeling and a traceable, 14-step approval workflow.

  • Dataverse header-detail relationships keep claims and expense lines connected.
  • Power Automate coordinates approval logic, supported by clear Data Flow Diagrams.
  • Power Apps gives employees and approvers a shared process.
DataversePower AutomateDFDProcess Automation
Revenue intelligencePROJECT_02

A clearer view of growth

Year-over-year performance

ILLUSTRATIVE DATA
Illustrative year-over-year revenue trendA solid emerald line and dashed slate line compare two example revenue trends across January to June. This is a concept illustration, not actual project results. JANFEBMARAPRMAYJUN
Current yearPrevious year

Business intelligence & storytelling

Revenue & Growth YoY Analytics

Turning revenue data into an executive performance dashboard that makes year-over-year trends easier to interpret and act on.

  • Advanced DAX brings current and prior-year revenue into a consistent analytical view.
  • Executive KPIs and clear information hierarchy support performance reviews.
  • Data Storytelling connects the numbers to the business questions behind them.
Power BIDAXSQLUI/UX Design

02 / Toolkit & capabilities

The tools. The thinking.

Connecting technical execution
with the wider business context.

Data & Analytics

  • SQL & Python
  • Power BI & Advanced DAX
  • Relational Data Modeling
  • Data Quality & Validation

Low-Code Systems
Architecture

  • Microsoft Dataverse
  • Power Apps & Power Automate
  • Data Flow Diagrams (DFD)
  • Business Process Automation

Visualization &
AI Workflow

  • Dashboard UI/UX Design
  • Data Storytelling
  • Generative AI Integration
  • Adobe Creative Suite

Governance/Logic

  • Systems Thinking
  • Data Governance & Access
  • Agile/Scrum & Sprint Planning
  • Business Development Strategy

03 / Learning log & dev notes

Always building. Always learning.

Small discoveries, written down.
Three sample notes from the toolkit.

Power BI / DAX

DAX Patterns:
Making YoY measures reliable

Working with prior-year comparisons, blank values, and safer division in revenue measures.

Read sample noteClose note

Use DIVIDE when the denominator may be zero or blank. With no alternate result supplied, it returns a blank in those cases.

Revenue YoY % =
VAR CurrentRevenue = [Revenue]
VAR PYRevenue =
    CALCULATE(
        [Revenue],
        SAMEPERIODLASTYEAR('Date'[Date])
    )
RETURN
    DIVIDE(
        CurrentRevenue - PYRevenue,
        PYRevenue
    )

This example assumes an existing [Revenue] measure and an appropriate related Date table. Validate the comparison using known periods, including one with no prior-year revenue, before using it in a report.

Reference: Microsoft DAX guidance ↗
Dataverse

Dataverse Security:
Designing access with intent

Connecting relational schemas, record ownership, and security roles to a practical access model.

Read sample noteClose note

Dataverse evaluates privileges and record access. A role’s permission to read a table is part of the picture; access to the particular record also matters.

A sample claim-system review

  • Define who should create, read, update, and approve each type of record.
  • Review access to both claim headers and expense details, including relationship operations.
  • Test employee and approver accounts with their intended roles and sample records.
Reference: Microsoft record access ↗
Design / UI·UX

Dashboard UI/UX:
A system for clearer insights

Exploring how color, typography, and information hierarchy help the right numbers stand out.

Read sample noteClose note

A sample dashboard design checklist

  • Start with the decision the dashboard needs to support. Put the relevant KPI first.
  • Keep metric labels, number formats, spacing, and typography consistent.
  • Pair color with labels or line styles so comparisons remain understandable without color alone.
  • Show the reporting period and comparison context beside the metric.
Suggested reading order

Headline KPI → Trend → Breakdown