← All work

Sole engineer · Panoramic Window & Door Systems · 2025–present

Construction Company Platform

A window & door construction company runs its jobs on a Microsoft 365 platform: SharePoint lists holding every bid, contract and work order, Power Apps on phones and desktops, and flows automating what happens in between. I'm its only engineer. I build new tools on that platform and work across the rest of it, owning each project from the first conversation with the people who need it through to production.

Role
Sole software engineer
I built
Field app · photo pipeline · sidebar rail
Users
Office staff and field crews
Stack
TypeScript · Power Platform · .NET 8
82automated flows
2,106flow actions
37Power Apps
35SharePoint lists
~1,500custom fields
490actions to set up one job

The platform I build on, counted from its solution export. It's the environment I work in, and not every flow or app in it is mine. What I built is below.

What I built

A field app for installation crews

Crews post job-site updates from their phones inside Microsoft Teams, a tool they already have open. Each job gets a threaded feed. The compose screen handles primary and secondary @mentions, a subject, an urgent flag, and photos. Updates sent from Outlook land in the same feed.

The photo pipeline behind it

Flows file every photo into the job's own Teams site, generate thumbnails, and stamp nine metadata fields on each file: sender, original date, channel, thread, job number, sequence and more. The in-app gallery groups photos by day, week or month, so a job's history stays findable after thousands of uploads.

A sidebar rail for the whole company

A browser extension that adds a red icon rail to every page. It opens the company's tools in a side panel over whatever you're working in: contacts, calendar, a searchable master index of every job, weather for job sites, wage rates, and Teams posting. Which tools appear on which sites is configured from SharePoint lists, and flows generate the rules.

Email archival, end to end

An Outlook add-in and a serverless API in C#/.NET 8 on Azure Functions that files emails and their attachments into the right job folder in SharePoint through Microsoft Graph.

Solving around a licensing wall

When premium licensing costs blocked an interface the team needed, I designed a postMessage-based architecture that delivered the same experience without the recurring spend.

Field app

Post, read, and reply from the job site

Tap any screen to enlarge

Photo pipeline

From a crew's phone to a searchable library

1Crew takes photoson site, from a phone2Teams field apppost, @mentions, subject3Flow files theminto the job's Teams site4Thumbnails + metadata9 metadata fields per photo5Photo gallerygrouped by day, week, month

Sidebar rail

The company's tools, one click from any page

The rail sits on the edge of the browser on every site. Each icon opens a panel: the master index searches every bid, contract and work order by job number, alongside contacts, the calendar, job-site weather, wage rates, Teams posting and a decimal-equivalents table.

It's a Manifest V3 extension in plain JavaScript. The panels are Power Apps hosted as small web pages, and flows generate the per-site rules from SharePoint configuration lists, so adding a tool is a list edit, not a code release.

The wider platform

What my tools plug into

These diagrams show the platform as a whole, drawn from its definitions. It's the environment I work in, and not all of it is my work.

Coming inmany shapes of dataEmail via 6 Outlook add-insField crew photos + postsBids, quotes, contracts, work ordersInventory receipts + movesDirectory, calendars, weatherPublic prevailing-wage PDFsAutomation82 flows · 2,106 actionsOne-click job workspace setupRecord numbering + approvalsEmail filing to job foldersPhoto import + thumbnailsInventory postingSyncs + config generationStored35 lists · ~1,500 fieldsJob lists keyed by job numberMaster job indexPer-job Teams sites + librariesPhotos with 9 metadata fieldsInventory stock + lotsConfig + directory listsUsed through37 Power Apps + moreTeams field apps (phones)Outlook add-ins + dialogsBrowser sidebar railMobile job launcherSharePoint web part + action barPower BI bids report
01Microsoft 365 group + teamcreated for the new contract02Channelsbilling + field work, group email03Folder tree27 folders, 138 actions04–06Links + templatesfield-work data, info links09–10Project plan + tasksplan, Teams tabs, task template11–12Submittal log + chartExcel log, chart link13Crews addedfield crews join the channel✓Progress cards in Teamsposted at every stage

One click on a new contract runs 21 flows, about 490 actions, to build its whole workspace.

Job recordsevery job type shares one job number, rolled up into a master indexBid List221 fieldsQuotes List60 fieldsBudget List34 fieldsContract List199 fieldsProject List50 fieldsWork List36 fieldsService List23 fieldsProduction List31 fieldsMaster Job Indexjob no. · type · source listContacts61 fieldsEmployees · Wages36 + 35 fieldsPer-job Teams sitedocs · photos · thumbnails+ config and directory lists: users, departments, crews, calendars, weather cache,email registry, metadata terms, app config. 35 lists across ~8 sites, ~1,500 custom fields.Inventoryevery movement is a transaction; a flow keeps stock and lots in stepInventory Transactionsitem · lot · from/to · jobProducts28 fieldsInventory Stockper item per locationInventory Lots21 fieldsLocationsSite → Building → Locationfleet vehicles are locations too
OutlookOffice.js add-inArchival APIC# / .NET 8Azure FunctionsMicrosoft Graphmail + attachmentsSharePointfiled to theright job folder

Let's build something.

I'm open to full-time and contract roles in AI/agent engineering, mobile, and full-stack TypeScript, remote or hybrid around NYC and Philadelphia.