Integrating Technology · Improving Processes · Implementing AI

Adam Whitely

This is a working portfolio of systems I've built around data, automation, workflow design, and continuous improvement. The projects are different, but the approach behind them is usually the same.

This page is a work in progress. Other site pages are hidden - use a direct link if you've been given one.

How the system works

Most useful systems start before the tool exists.

The first work is figuring out what is actually happening, what information is missing, what signals already exist, and how those signals can be captured without turning tracking into another chore.

After that, the work changes. The collected data becomes a foundation. Analysis, interventions, automations, dashboards, prompts, scripts, and full projects can branch from it. Some stay connected to the live data. Others use the data once to understand the problem, then become their own separate tools.

First build the evidence layer. Then let projects grow from what the evidence makes visible.

The process has two connected halves:

Foundation
Discover, Observe, Capture, Calibrate
Figure out what needs to be collected, where it already exists, how to structure it, and whether the record is trustworthy enough to use.
Branches
Analyze, Intervene, Automate, Iterate
Use the evidence to create tools, decisions, dashboards, workflows, prompts, automations, and projects that can improve independently over time.
01
Discover
Find where better information could change what gets built or improved.
02
Observe
Understand the real workflow, behavior, source, or system before changing it.
03
Capture
Turn useful signals into a structured record that can be reused.
04
Calibrate
Check whether the data is complete, accurate, useful, and worth maintaining.
05
Analyze
Look for patterns, relationships, gaps, and opportunities in the captured data.
06
Intervene
Build or change something based on what the evidence shows.
07
Automate
Make the useful parts repeatable when the pattern is stable enough.
08
Iterate
Keep improving the data layer, the branch projects, or both.
The data layer and the product layer are related, but they are not always the same system. Sometimes data directly powers the result. Sometimes it simply reveals what should be built next.

Discover

Find the place where better evidence could change the work.

Discovery starts with noticing that a workflow, habit, archive, export, or system contains more useful information than it currently exposes.

The opportunity might be a missing metric, a repeated manual task, a hard-to-explain behavior, a pile of unstructured exports, or a process where people keep making decisions from memory.

Hidden source
What useful data already exists but is hard to access?
Friction
Where is the work harder than it needs to be?
Repetition
What keeps getting typed, checked, decided, or rebuilt?
Judgment
Where would a better record improve the next decision?
Outcome
What product, workflow, or behavior could improve if the signal was visible?
Branch
Could one captured source support several different projects?

Discovery defines the source and the reason it matters.


Observe

Understand what is actually happening before deciding what to collect.

Observation is the bridge between a vague idea and a useful data layer. It asks what the real workflow looks like, where the signals come from, what already exists, and what would be noise.

This step is intentionally before capture. If the wrong thing gets collected, every later project inherits that mistake.

Sources
Exports, logs, chats, forms, files, messages, sensors, devices, databases, and manual notes.
Moments
The events where something meaningful happens: a choice, delay, correction, failure, success, or change.
Shape
Whether the source is structured, messy, repeated, timestamped, exportable, or only visible through behavior.
Use
What future projects might need from the record: search, metrics, triggers, examples, training data, or context.
Noise
Data that is available but not useful enough to justify keeping.
Friction
How capture can happen without slowing down the original work.

Observation decides what is worth turning into a durable record.


Capture

Create the reusable evidence layer.

Capture turns scattered signals into something that can be searched, queried, reviewed, joined, summarized, or used by other tools.

Sometimes that means parsing an export once. Sometimes it means adding a logging step to an existing workflow. Sometimes it means syncing live data into a local database. The point is not to collect everything. The point is to create a record that future work can trust.

Input
Exports, conversations, actions, timestamps, states, drafts, corrections, logs, forms, or device events.
->
Output
A structured corpus, database, index, log, or dataset that can support many later projects.

Capture can create different kinds of foundations:

A searchable archive
A structured database
A time-series log
A labeled corpus
A workflow event stream
A dashboard-ready table
A context source for AI tools
A record that can keep syncing over time

This is the part that makes future projects cheaper. Once the source is captured well, new ideas can branch from the same foundation.


Calibrate

Make sure the foundation is good enough to build on.

Calibration checks whether the captured data actually represents the thing it claims to represent.

For live systems, calibration may mean adjusting fields, thresholds, categories, logging frequency, or sync rules. For retroactive systems, it may mean checking whether the historical record is complete enough, biased in known ways, or missing sources that should be added later.

The important events are included.
The record contains the moments that can change the outcome or explain the project.
The structure supports future branches.
New analysis should usually mean a new query or view, not a full reparse.
The capture method can survive normal use.
If the system creates too much upkeep, the data layer will decay.
The limits are understood.
A useful dataset can still have gaps, bias, missing sources, or narrow scope.

Calibration is what turns captured data into a foundation instead of just a pile of records.


Analyze

Use the foundation to find branches worth building.

Analysis does not have to become a project by itself. Sometimes it becomes a report or dashboard. Sometimes it becomes a prompt, a rule, a script, a UI, a model, a workflow change, or a new product idea.

The useful question is: what can this evidence now support?

Pattern
Something repeats
A phrase, error, delay, question, choice, handoff, or behavior appears often enough to design around.
Gap
Something is missing
The record shows where a workflow lacks context, ownership, visibility, examples, or usable structure.
Opportunity
Something can be built
The captured source can support a tool, automation, dashboard, training corpus, prompt, or decision layer.

Analysis is where one data source can start becoming many projects.


Intervene

Build the first practical response to what the data shows.

An intervention is any concrete change made because the evidence revealed a better path.

It might be small: a shortcut, a correction rule, a report, a prompt, a better field, a clearer threshold. It might be larger: a dashboard, a workflow tool, a knowledge base, an app, or a new operating process.

Problem
The captured record shows a repeated pattern or missing support.
Signal
The data is specific enough to explain where the project should act.
Action
A focused tool, prompt, rule, dashboard, or workflow change is built from that evidence.

Interventions do not all need to stay attached to the data layer. Some do. Some are simply better because the data helped define them.


Automate

Connect the branch back to the data when repetition is clear enough.

Automation belongs where the pattern is stable, the action is known, and the system can reduce effort without hiding important judgment.

Sometimes automation means live syncing: the data updates and the product changes with it. Other times automation means generating a periodic report, refreshing a prompt, updating a rule list, or triggering review only when the record crosses a threshold.

Data relationship
Project behavior
Live-linked
The project updates as new records sync in.
Periodic
The project refreshes on a schedule or after an export.
One-time informed
The data shaped the project, but the tool now stands on its own.
IF
the data keeps changing and the project benefits from staying current
THEN
sync, refresh, trigger, or regenerate from the data layer
ELSE
use the evidence to build the project well, then let the project evolve separately

Automation should make the branch easier to keep useful. It should not force every project to become a live dashboard.


Iterate

Improve the foundation, the branches, or both.

Iteration is where the system becomes a portfolio of work instead of a single loop.

The data layer may need better capture, new sources, cleaner labels, or stronger calibration. The branch projects may need new features, simpler interfaces, better rules, more useful outputs, or a different relationship to the source data.

Improve the foundation
Add sources, clean structure, reduce noise, or make capture easier.
Improve a branch
Refine a tool, dashboard, automation, prompt, report, or workflow.
Spawn a new branch
Use the same captured source to build another practical project.
Retire what stopped helping
Remove fields, rules, alerts, views, or projects that no longer justify their upkeep.

Iteration includes asking:

Does the data layer still represent the real source?
Did this branch project solve the problem it came from?
Should this project stay live-linked to the data?
Would a periodic refresh be enough?
Did the analysis reveal a new project?
Can the foundation support more branches?
Can part of the system be simplified or removed?

The goal is not one permanent system. The goal is a useful foundation that can keep producing better projects.


Summary

The portfolio is organized around this pattern:

01
Find a source, workflow, behavior, or archive where better evidence would matter.
02
Understand what should be captured and what should be ignored.
03
Build a data foundation that can support more than one future use.
04
Use the foundation to find patterns, gaps, and opportunities.
05
Spin off practical projects: tools, dashboards, prompts, automations, reports, apps, or workflows.
06
Decide whether each branch should stay live-linked, refresh periodically, or evolve separately.
07
Keep improving the foundation and the branch projects as the work changes.

This can apply to personal systems, AI conversation exports, workflow capture, behavioral logs, domain knowledge, internal tools, and operational improvement work.

Use cases

Each use case starts with a discovery and observation stack, then shows the practical systems and projects that grew from the captured data.

BUILTpersonalprofessional

From writing samples to a personal writing intelligence system

This started with a simple discovery: the writing samples already existed.

They were scattered across ChatGPT conversations, AI drafts, personal messages, code sessions, work notes, and long-running project threads. The useful data was not missing. It was just trapped in exports and conversation histories that were technically available but practically hard to use.

Once the export problem was solved, the rest became a practical application of the same process described in the ethos: discover the source, observe what is already there, capture it into a structure, analyze the patterns, intervene with small tools, automate the repeatable parts, then keep iterating as the corpus grows.

1.55M
words analyzed
10,072
writing samples
29,191
unique words
3 yrs
covered

Discover

The initial observation was almost embarrassingly useful: ChatGPT, Claude, and the surrounding writing tools already contained years of examples of how I write, how I ask questions, how I revise, where I get stuck, and what kinds of outputs I accept or reject.

The only hard part was knowing how to export it and turn it into something queryable.

The writing system did not start by inventing new data. It started by noticing that the data was already there.

Observe

The raw material was messy but rich: conversation exports, message histories, draft responses, code blocks, correction patterns, topic clusters, and repeated phrases. On their own, those sources were not useful enough. Together, they formed a writing corpus.

AI exports
Conversation history
Prompts, drafts, accepted answers, rejected tone, code sessions, and project threads.
Personal writing
Real voice samples
Messages and notes that show actual phrasing, pacing, punctuation, and vocabulary.
Derived tables
Analysis-ready records
Words, phrases, topics, errors, sentence metrics, code blocks, and monthly rollups.

Capture

The capture step was the unlock. The export was parsed into a local database with stable tables for conversations, messages, tags, topics, extracted text, and code blocks. Writing samples became rows instead of blobs.

That changed the work. Adding a new analyzer no longer meant rebuilding the pipeline. It meant writing a query and deciding what action the result should support.

Input
ChatGPT export, AI writing threads, personal messages, drafts, prompts, corrections, and project notes.
->
Output
A queryable writing corpus that can feed tools, dashboards, prompts, and automations.

Calibrate

This one is retroactive, so calibration is lighter than it would be in a live workflow. The main question was not "are we capturing the right behavior going forward?" It was "is this historical corpus representative enough to build from?"

The answer was yes for personal writing patterns, typo patterns, repeated phrases, and voice analysis. The next calibration step is to add more sources: Claude history, email drafts, docs, notes, and any future AI-writing exports.

Analyze

Once captured, the corpus started producing useful systems immediately:

Custom autocorrect from real typo patterns
Vocabulary growth and readability over time
Voice profile for AI rewriting
Provider-agnostic prompt library
Manual snippet expander
Predictive phrase completion from repeated n-grams
Personal jargon dictionary
Communication pattern fingerprint
Emotional tone and friction tracker
Writing evolution timeline

Intervene

The intervention layer is where this stops being "interesting analysis" and becomes practical. The outputs are small tools that change the writing process directly: fix the typo before it ships, suggest the phrase before it gets retyped, make AI drafts sound right on the first pass, and show when writing is drifting into jargon.

Automate

Automation is intentionally selective. The system does not automate all writing. It automates the parts that are obvious, repetitive, and already well evidenced by the corpus.

IF
a repeated writing pattern is clear, low-risk, and easy to verify
THEN
turn it into a shortcut, correction, prompt instruction, dashboard metric, or reusable skill

Iterate

Iteration is the main point. Every new export, draft, message, or AI session can become more training material for the personal system. The project keeps creating new projects.

Spawned projects

Specific tools, software, prompts, dashboards, and project branches that grew from this data foundation.

BUILTpersonalprofessional

System-wide custom autocorrect

Need

Built-in autocorrects catch generic typos. They don't catch the ones I actually make.

After three years of writing I had a clear pattern of how I get words wrong. Almost none of it overlapped with the default dictionary. The system was correcting things I never typed and ignoring the ones I always do.

Observed

Three years of personal messages — about 10,000 messages, 1.55 million words — parsed into a SQLite database. Each typo tagged by message, time of day, length, and surrounding context.

The output: 879 confirmed errors, 100+ distinct misspelling patterns. Most are valid English words spelled wrong (like "form" instead of "from") so a generic spellchecker won't flag them at all.

Applied

Personal. An AutoHotkey script watches every keystroke across Windows and replaces any of those 100+ patterns the moment they're typed. Toggle on/off with Ctrl+Shift+F12. The patterns came from my own data — the script doesn't fight me, because it was built FROM me.

Professional. Same approach scales per-employee or per-team. Onboarding tooling that adapts to the writer instead of forcing the writer to adapt to a generic dictionary. Most useful where the words people actually fumble are domain terms — legal, energy, healthcare.

Iterated

The dataset keeps growing as I write. Each new pattern goes back into the script. Next step is auto-detecting new patterns from the rolling corpus instead of adding them by hand.

BUILT

Spelling correlation analysis

Need

_What gap or annoyance triggered this work? (Rewrite this section in your voice.)_

Observed

Error rate per message, correlated to time of day, day of week, message length, classification, and monthly volume

Applied

Personal. Visibility into when typing quality degrades (weekends 2.5× weekday, late night worst)

Professional. Quality signal for written communication channels — flag messages or periods where attention is fragmented. Could feed coaching tools or workload indicators

Iterated

All findings already documented in chatgpt_import/IDEAS.md

CONCEPTpersonalprofessional

Voice-matched prompt library

A distilled style guide pulled out of the personal message corpus, formatted as a single prompt that drops into any AI tool and makes the output sound like the writer.

Lower effort than building a full skill — and provider-agnostic. Same prompt works in ChatGPT, Claude, Gemini, anywhere that takes system instructions.

Per-team or per-brand version is the obvious extension. Customer service replies that stay on-tone. Marketing copy that doesn't read like generic AI output. Internal docs that match the institutional voice without the writer having to think about it.

PARTIALpersonalprofessional

Snippet expander — declared shortcuts, system-wide

Need

The same phrases get typed over and over — addresses, email signatures, common technical commands, stock replies. Every text expander I tried was either too heavy (TextExpander, $40/yr), or locked to one app, or didn't survive a Windows reinstall.

I wanted shortcut → expansion pairs in plain JSON I owned, with a small UI to add and edit them, and a background listener that just worked.

Observed

A small Tkinter app for adding, editing, and toggling snippet pairs. Storage is plain JSON — copy-pastable, version-controllable, easy to back up. A background keyboard listener watches typed text and swaps matched shortcuts system-wide.

Distinct from the autocorrect work (which fixes mistakes I make without thinking). This expands shortcuts I declare on purpose.

Applied

Personal. Currently use it for addresses, email closing blocks, common commands, and the handful of phrases I type every day.

Professional. Same shape, three obvious team-level applications:

  • Legal boilerplate libraries shared across a practice
  • Customer service stock replies maintained by team leads, expanded by every agent
  • Technical command sequences (kubectl flags, AWS CLI patterns) shared across an ops team

Shared JSON files in a repo means snippets propagate across the team without anyone running an installer. New hire clones the repo, listener picks them up.

Iterated

The next merge is with the predictive-text concept — declared snippets stay always-available, AND the system surfaces likely expansions from n-grams in the writing corpus. Combined with the autocorrect and the write-like-me skill, that's the full personal writing stack.

BUILTpersonalprofessional

Write-like-me — voice profile as a skill

Need

Generic AI writing has a tell. Too wordy, too formal, opens with "I hope this finds you well," cushions every direct statement. None of that is how I write. So when I'd ask AI to draft something I'd spend half the time deleting filler and rewriting it to sound like me anyway.

The fix had to be reusable — drop a single instruction in front of any AI conversation and have the output already match.

Observed

Pulled my own voice profile out of the message corpus. From 1.55M words across 10K+ messages, three years of real writing:

  • Average sentence length, sentence-length distribution
  • Opener phrases I actually use ("lets...", "okay so...", "I want...", never "just following up")
  • Punctuation and capitalization patterns (58% of casual messages drop end punctuation)
  • Domain vocabulary used naturally (SGIP, NEM, SREC, TPO — never defined)
  • Things I push back on consistently ("too wordy", "too formal", "lower the adjective count")

All of that distilled into a single SKILL.md — a Claude skill that gets pulled in automatically whenever I ask for any rewriting.

Applied

Personal. Any rewrite, draft, or polish task I hand to Claude already comes back in my voice. I'm not editing AI output anymore. I'm reading it once and shipping.

Professional. Same approach scales per-team or per-brand. The corpus changes — Slack archive, support tickets, marketing copy, internal docs — but the pipeline is identical:

  • Extract voice markers from real writing
  • Distill into a system-prompt-shaped instruction
  • Drop in front of any AI tool, provider-agnostic

For organizations adopting AI broadly, this is one of the highest-leverage things to build. Without it, every team member's AI output sounds like an AI. With it, the brand voice survives the AI handoff.

Iterated

The skill is at chatgpt_import/write-like-me/SKILL.md. The voice profile gets re-derived as the corpus grows. Next is wiring the same profile into other AI providers (ChatGPT, Gemini) so the voice carries across tools.

CONCEPT

Predictive text / phrase completion

Need

_What gap or annoyance triggered this work? (Rewrite this section in your voice.)_

Observed

N-gram frequencies from message corpus

Applied

Personal. System-wide phrase expansion for high-frequency phrases ("virtual power plant" 499×, "give me a list of" 341×)

Professional. Domain-specific text expansion. Particularly valuable for repetitive professional communication (legal, energy program descriptions, customer service)

Iterated

Apostrophe corrections need context-awareness. Pairs with the manual snippet expander already prototyped in 1.6a — the predictive layer would auto-suggest snippets the user hasn't yet defined

BUILTpersonalprofessional

Vocabulary growth and readability over time

Need

I knew I was learning new things every year — the energy/solar industry alone reshaped how I write — but I had no way to actually see it. How much new vocabulary was I picking up? Was my writing getting more complex over time, or just longer?

Observed

Monthly rollup against the message corpus. For each month, computed:

  • Unique vocabulary count
  • Net new words (first appearance that month)
  • Type-token ratio (lexical diversity)
  • Flesch-Kincaid grade level
  • Gunning Fog index

The results across 1.55M words:

  • 29,191 unique words total
  • 34% used only once — the long tail of writing
  • The two-month energy deep-dive added 6,731 new words

Applied

Personal. A clear picture of when my vocabulary was expanding (and which topics drove it) vs. when it was stable. The Flesch-Kincaid trend lets me catch myself drifting into jargon and over-complexity in messages that should stay plain.

Professional. Same metrics applied org-wide answer questions most teams don't even know to ask:

  • Is our documentation drifting toward unreadable
  • Are two teams converging on a shared vocabulary or diverging into silos
  • When a new domain enters the company (a new product, a new regulation, an acquisition), how fast is the vocabulary spreading
  • Which writers consistently produce content above the org's reading-level baseline

Iterated

Same source DB as the autocorrect and the write-like-me skill. Adding new metrics is cheap — they're just queries against the existing rollup table.

CONCEPT

Personal jargon dictionary

Need

_What gap or annoyance triggered this work? (Rewrite this section in your voice.)_

Observed

Domain-specific vocabulary that does not appear in standard dictionaries (SGIP, NEM, SREC, PBSR, NBT, TPO, RGM, IPM, VPP, ADI, RETS, SCE, SDCP, TOU, NYSERDA)

Applied

Personal. Glossary of domain terms with definitions extracted from prior conversations explaining them

Professional. Onboarding accelerator for industry-specific roles. Auto-generated glossaries built from team chat and document history

Iterated

Energy domain has 814 source conversations to draw from

CONCEPT

Communication pattern fingerprint

Need

_What gap or annoyance triggered this work? (Rewrite this section in your voice.)_

Observed

Question-to-statement ratio, opener pivot patterns, action initiator frequency, list-vs-prose preference

Applied

Personal. Self-knowledge of how communication actually happens vs. how it is perceived

Professional. Identify communication mismatches in teams. Detect when a writer's actual style diverges from their intended persona (e.g., formal channel using casual fingerprint)

Iterated

Could feed style coaching tools

CONCEPT

Emotional tone tracker

Need

_What gap or annoyance triggered this work? (Rewrite this section in your voice.)_

Observed

Sentiment heuristics over time — frustration markers ("isn't working", repeated punctuation), satisfaction markers ("perfect", "thanks"), confusion markers

Applied

Personal. Identify high-frustration topics or periods, correlate with output quality

Professional. Customer service quality signals. Internal communication health indicators. Burnout precursor detection without requiring surveys

Iterated

Heuristic-based, no LLM cost. Privacy-respecting if scoped to opt-in

CONCEPT

Writing evolution timeline

Need

_What gap or annoyance triggered this work? (Rewrite this section in your voice.)_

Observed

Monthly cohort analysis of vocabulary, sentence complexity, topic density, question patterns

Applied

Personal. Visualization of three-year trajectory from analyst to energy specialist

Professional. Track skill development of individuals or teams. Demonstrate capability growth in performance reviews with data rather than narrative

Iterated

Trajectory already partially documented in IDEAS.md

Reusable pattern

The professional version is the same shape with a different corpus: team chats, support tickets, documentation, sales notes, product conversations, or company-managed AI logs.

The value is not "AI writes better." The value is that the organization can finally see the language layer of its work: what people ask, what they repeat, what they misunderstand, which terms spread, where tone breaks down, and which writing patterns are worth turning into tools.

Before
Scattered writing
Samples exist, but they are buried in chats, exports, docs, and AI histories.
After
Reusable writing system
The corpus feeds corrections, prompts, dashboards, snippets, onboarding tools, and future analyzers.

This page updates as the work does.