Workflo Don Florencio Email me

Websites, live data and AI tools · New York & New Jersey

Things I have
built, and you
can open

Nine businesses, six live maps, a globe that plays back 300,000 years of human migration, a formicarium simulated ant by ant, and a shelf of small tools. Reminders that cut no-shows, a front desk that answers the phone after you close, an audit that reads a site and writes up what is wrong. Further down, 3D and AR: a sofa you can stand in your own room. Most of it opens in one click, so you can judge the work rather than the pitch.

All of it custom code. No page builders, no templates.

One minuteFive things to open, one line each

If you only have a minute

  • Client site · own domain Velvet A. Johnson-Ross

    Eight pages for a New York housing policy consultant, light and dark, no framework.

    Open the live site
  • Live data · realtime Trains Now

    Every subway train the MTA is reporting, drawn from a feed that carries no coordinates.

    Watch it move
  • Tested code · TypeScript Net Sheet, rebuilt

    Next.js and TypeScript, 61 tests on every push, two real bugs found in the original.

    Open the app
  • Paid client · live Vorkt News

    A reader forum on Discourse for a daily digest, delivered in two phases, live since September.

    Open the live site
  • Client work · no link 512 Capital Partners

    The plumbing behind an outreach desk: email authentication, a research funnel, a do-not-send gate.

    Read the card

What I doRange, stack, process

What I can build

Eight things I have shipped, not eight things I have read about. Every one of them points at something on this page you can open and poke at.

Sites a business can stand behind

Storefronts, booking pages, service sites. Custom code, so they load fast on a phone and nobody pays a monthly fee to keep them alive. See Grim Reaper Gardens, Jess Fillyo and Margie Horowitz.

3D products and web AR

A real model in the page instead of a photo shoot: change the fabric with no reload, then stand the thing in your own room from a phone browser, with no app to install. See Holloway and Barham.

Live data, fetched and drawn

Public data pulled on load and turned into something readable, with the colours and the axes chosen on purpose. Sometimes that data is moving: Trains Now decodes the MTA's realtime feed and Docks Now reloads every fifteen seconds.

Voice and phone interfaces

A page that listens, answers out loud, and knows when to stop talking and take the booking. See Night Desk.

Real time simulation

Physics on nearly a million cells at sixty frames a second in a browser tab, with heat, fire and chemistry running between the materials. See Granulab, and Vivarium under Games.

Multiplayer over a socket

Room codes, a server that holds the truth, and two people in different houses watching the same board move. See Ant Raid.

Apps that work with no signal

Installed to a phone home screen, opening offline, keeping your progress on the device instead of on somebody else's server. See FALA.

The boring automation

The spreadsheet nobody wants to touch, the report someone retypes every Monday, the job that should have been running itself for a year. Python, on a schedule, with the output checked. See 512 Capital Partners.

The stack, by name

Plain HTML, CSS and JavaScript wherever that is enough, which is most of the time. The rest of what this page runs on, named so it can be searched for:

Languages
JavaScript, TypeScript, Python, SQL, HTML and CSS
Front end
React and Next.js, Tailwind, Three.js and WebGL, Canvas 2D and WebAudio, model-viewer with glTF and USDZ, MapLibre and vector tiles, service workers, the Web Speech API
Back end and data
Node, Postgres with row level security, serverless functions and Blob storage on Vercel, WebSockets, GTFS-realtime protobuf decoded by hand, DNS with SPF, DKIM and DMARC
Platforms and tooling
Git and GitHub Actions, Vitest and Playwright, Lighthouse, Vercel, GitHub Pages and Render, Discourse themes and mail, WordPress plugins and Squarespace injection, Blender, ComfyUI

How a project runs

The same five steps every time, sized to the job. The worked example is Vorkt News, the reader forum in the Work section below.

Brief

A call or a long email about what the business needs, and the one constraint the build has to respect. For Vorkt: the owner's old forum died of hand moderation, so nothing ships that costs him more time than he spends now.

Plan

A written build plan before any code: scope, schedule, risks, what the client supplies, and a definition of done. A deposit up front and the balance at launch.

Build

Phase one first, on accounts the client owns. He created the instance and invited me in as staff, and phase one went up on his live site the same week the deposit landed.

Launch

The forum on its own domain, its mail authenticated so it never touches his main domain, and the day-to-day written down for him: he posts by sending the email he already sends.

After

On call for adjustments, maintenance quoted separately once the real load is known, and follow-on work scoped as its own job.

  1. Brief, build plan with a definition of done, domain registered, deposit received.
  2. Phase one on the live instance: theme from the signed-off mockup, rooms, moderation rails, the digest posted as threads, and the email-in workflow.
  3. Phase two invoiced. The forum moved onto vorktnews.com. Wordmark and logo proposals.
  4. Build complete, balance paid.
  5. A reader growth plan, scoped and delivered as separate work.

Working with other people

Most of this page I built alone. The client work was not, and the habits are the same either way.

  • The client owns every account and invites me in as staff. I never ask for a password, and a DNS record is checked by query after it changes rather than taken on trust.
  • Sign-off before build: a mockup approved in writing, a plan with a definition of done, and a deposit that says we agree. Each phase gets its own invoice.
  • Inside other people's systems: a Discourse theme and email decorator on a client's forum, a 3D viewer packaged as a WordPress plugin and a Squarespace injection, an outreach desk run on a firm's timesheet with every batch checked against its do-not-send file.
  • Everything in git, the public half on GitHub, and six repositories run their tests on every push through GitHub Actions.
  • Handover is written down. A client gets the build plan, a status write-up at the end of each phase, and the invoices. The case studies below say what did not work as well as what did.

Selected workNine businesses · 2026

Client work, and work I went looking for

Nine businesses. Three are client sites you can open right now, two of them on the client's own domain. One is a product demo, and one is client work with nothing to click, the plumbing behind an outreach desk. Four are concepts and spec rebuilds: I picked the company, worked out what its page should argue, and built it. Each card says which of these it is, and when.

Velvet A. Johnson-Ross homepage: her name set in a large Bodoni serif above a pink script signature, on a dark plum sheet over a rose gradient, with her portrait beside it and buttons reading Experience, Public record and Testimony.

Velvet A. Johnson-Ross

Client site · velvetjohnsonross.com ·

A site for a New York housing justice and policy consultant. Eight static pages carrying her CV, her public record, her 2021 testimony reproduced in full, and the #HerHousing podcast with its research and its budget.

MoreLess

No build step, no framework and no dependencies. The palette and the type are taken from her own pitch deck, and one toggle carries the whole site between light and dark.

Open the live site
Vorkt News: a forum front page headed The 4am digest, and the argument that follows, with four story cards under a navy bar and a sidebar of rooms: The 4AM Digest, Scott's Writing, Politics, Open Floor.

Vorkt News

Client site · vorktnews.com ·

A reader forum for a daily news digest that used to go out as plain email. Discourse on a domain of its own, with a theme built from the mockup the client signed off. Paid, in two phases, live since September 2026.

MoreLess

A decorator turns his morning email into story cards without his readers ever seeing markup. Four rooms, moderation rails set so his judgment scales past what he can read himself, and forum mail authenticated so it never touches his main domain.

Open the live site
A specimen sheet headed Plumbing before the first call: the sending domain's SPF, DKIM and DMARC records marked pass, live and published, beside an account pipeline running 502 listed, 311 qualified, 228 verified addresses, 61 to the phone.

512 Capital Partners

Sales development · Austin strategic advisory ·

Nothing here to click, which is the point: the work is the plumbing behind an outreach desk. The firm's sending domain fixed before a single email went out, then a research pipeline in Python that took a list of 502 organisations to 311 qualified and 228 verified addresses. Twelve hours a week, on a timesheet.

MoreLess

SPF corrected, a 2048-bit DKIM key live, DMARC reporting on, each checked by DNS query rather than taken on trust. A CRM built and loaded, and a gate every batch passes against the do-not-send file before anyone is written to.

Jess Fillyo homepage: a black split-screen with the model's name in large serif on the left, her measurements and booking buttons beneath, and a full-height portrait on the right.

Jess Fillyo

Client site · hosted here for her ·

A booking site for a New York model. Work grid, runway reel, measurements and downloadable digitals in one place, so an agency can see everything without asking for it.

Open the live site
Holloway and Barham: a three-seat sofa rendered in 3D beside a printed specification sheet listing upholstery, mill code and abrasion rating.

Holloway & Barham

Product demo · 3D and AR ·

A furniture page where the sofa is a real 3D model, not a photograph. Four upholsteries ride inside one glTF file, so changing the fabric swaps the material on the spot, and the specification rewrites itself to match.

MoreLess

No reload and no second download. On a phone the same page stands the sofa in your own room. The viewer is also packaged as a WordPress plugin and as a Squarespace injection.

Open the demo
Grim Reaper Gardens: an engraved bone-white wordmark on a dark botanical field, under the line You reap what you sow.

Grim Reaper Gardens

Spec rebuild · offered to the owner ·

A working storefront for a cannabis seed breeder upstate, rebuilt from the one he has and offered to him. Age gate, catalog, consulting, mailing list.

Open the live site
Koerner Construction homepage: a dark header over a photo of a house, with the headline Building is our business, relationships are the goal.

Koerner Construction

Concept redesign · Hudson Valley builder ·

A full site for a Hudson Valley builder: what a contractor who does careful work should look like online, rather than what most of them settle for.

Open the demo
Margie Horowitz Real Estate: a deep navy page, the line Five of my last nine listings sold above the asking price set large in serif, beside a photograph of a white colonial house in autumn.

Margie Horowitz Real Estate

Design concept · North Shore real estate ·

A homepage for a North Shore agent that argues from her closing record rather than from adjectives: five of her last nine listings sold above asking, with the misses left in so a seller can check before taking her word for it.

Open the concept
Ghostwriters Central: an editorial homepage reading Somebody else does the writing, your name goes on it, beside a manuscript page.

Ghostwriters Central

Homepage concept · Los Angeles ghostwriting ·

For a Los Angeles ghostwriting firm running since 2002. Their real copy, real rates and real reviews, set as an editorial page instead of an agency brochure.

Open the concept

Live dataFetched on load

Maps you can actually drive

Not screenshots of data, and not a chart somebody exported last quarter. Every one of these fetches the numbers when you open it, plots them, and hands you the filters. Two of them redraw themselves while you watch, because the feed behind them changes every few seconds. The globe at the top is the one exception: its records come from published archives, not a feed, and it names the source of every one. Open one and start dragging.

Deep Ancestry Atlas

Research globe · 300,000 years ·

262,000 dated records on one globe: ancient genomes, radiocarbon dates, cities, roads and languages, each a published record with its citation one click away. Drag the timeline and the ground changes with it.

MoreLess

At the last glacial maximum the sea is 120 metres lower, ice sits over Canada and northern Europe, and you can walk from Siberia to Alaska. Pick a journey and the camera flies it, low toward the horizon with the clock running: out of Africa to Australia, across the land bridge into the Americas, Taiwan to Polynesia. One hand-written WebGL page, with no framework and no build step.

Fly a journey Read the source
Bitemap: a map of New York City with 2,259 Chinese restaurants plotted in red, beside a panel of cuisine filters with counts.

Bitemap

Live map ·

Every restaurant in New York City on one map, 30,075 of them, drawn from the city's own inspection records. Filter by borough, by cuisine, or down to a regional kitchen, search for a dish rather than a name, and the map redraws as you go.

MoreLess

There are walking crawls built on top for when you want an afternoon planned rather than a single dinner. It runs on vector tiles, so panning a city's worth of points stays smooth on a phone.

Open the map Read the source
NYC Pulse: a dashboard of 311 complaints with a bar chart of complaint types and a borough breakdown.

NYC Pulse

Live dashboard ·

Every 311 complaint filed in the last seven days, fetched from NYC Open Data the moment you load it. Nothing is stored and nothing is stale.

Open it Read the source
Trains Now: a dark map of Manhattan, Brooklyn and Queens with coloured dots for 276 moving trains along their lines, and a legend counting trains per line.

Trains Now

Live subway map ·

Every train the MTA is reporting, right now, on the line it is running. The agency publishes protobuf with no coordinates in it, so the page decodes the feed itself and works out from the published schedule which two stations a moving train is between.

MoreLess

The feed says only "stopped at 42 St" or "in transit to 34 St". The position comes from the timetable, drawn on the track, refreshed every 25 seconds, and the dots ease across.

Watch it move How a feed with no coordinates becomes a map Read the source
Docks Now: Citi Bike docks across Manhattan and Brooklyn coloured green, yellow and red by how many bikes they hold, with system totals across the top.

Docks Now

Live bike share ·

Every Citi Bike dock in the city, refreshed every fifteen seconds. Ask it for a bike or for a dock and the colours flip to answer the question you actually have.

Open the board
Sold Nearby: recorded sales in Bayside plotted as green dots on a street map, beside a list of addresses, sale prices and price per square foot.

Sold Nearby

Sales and values ·

What actually sold on any block in the five boroughs, with the price, the date, the square footage and what that works out to per foot, straight from the city's own register.

MoreLess

Nassau and Suffolk are covered too, which took some digging: the state publishes no individual sale prices out there at all, so the page works them back out of the assessment roll using each town's own published ratio.

Look up a block How the Long Island prices are derived Read the source
Ant Atlas: a species map of the New York area with orange dots for records, beside a list of the species found there and their counts.

Ant Atlas

Species map ·

Every ant anyone has recorded, anywhere on Earth, from museum drawers and phone photographs alike. Pan to a place and it names what lives there.

Go looking

Tools and codeDemos, live apps, source

Tools, apps and source

Programs that take a repeating job off somebody's desk, then four repositories written to be read. Each row says which it is: a working demo runs on sample data, a live app is the real thing, and source only means the code is the deliverable.

PostFlo: a dark landing page headed Every client's week, on one grid, over a calendar with one row each for Instagram, Facebook, LinkedIn and X and one column per day.

PostFlo

In development ·

My own social scheduler for client work, built instead of rented. Each client gets a workspace, the calendar has a row per account and a column per day, and the client approves posts from their phone before anything goes out.

MoreLess

Thirteen networks. Each post is tuned in a copy of that network's own posting screen, so what the client approves is what gets published, and comments and messages come back into one inbox. A rule set for regulated products, starting with Washington cannabis, stops a post that names a price or drops a required warning. Every screen runs on the same REST API, and an MCP server lets an AI agent do the scheduling. Not public yet; I can walk you through it on a call.

Sales Floor Board, shown with generated data: tiles for leads with no contact in seven days, never contacted, open leads and calls today, above a table of agents sorted by who needs attention first.

Sales Floor Board

Working demo ·

GoHighLevel keeps every lead and every call, but it won't tell a floor manager who is sitting on them. This board does: leads nobody has called, leads going stale, and each agent's calls against the floor's pace.

MoreLess

The demo runs on 22 agents and 1,789 leads, all generated. On a live account every number comes from the GoHighLevel API, the board opens inside GHL from the sidebar, and TV mode puts it on the wall of the sales floor.

Try the demo
No-Show Saver: a dental appointment list beside a simulated phone showing text reminders.

No-Show Saver

Working demo ·

Text reminders that cut no-shows for dentists, salons and med spas. Sends the reminder, takes the confirmation, and fills the empty chair from a waitlist.

Try the demo
AI Front Desk: a dark dashboard showing an after-hours call being answered automatically.

AI Front Desk

Working demo + source ·

The phone still gets answered after you close. Takes bookings, answers the usual questions, texts a confirmation, and only wakes you for the big stuff.

Try the demo Read the source
Punchboard: a job board for a construction company with tabs for board, today, blocked and done.

Punchboard

Working demo ·

One board for a contractor's active jobs and punch lists. Everything overdue or due today pulls into one sheet you can print and take to the site.

Open the board
Reel Factory: a pizzeria dashboard listing phone clips sent in and the finished vertical reel.

Reel Factory

Working demo ·

You film 30 seconds on your phone during service. The cut comes back in 48 hours with hooks and captions, ready to post.

Try the demo
Site Audit: a form reading Paste a website, get the pitch, with fields for site, town and competitor.

Site Audit

Source only, runs on your machine ·

Paste in a website and it crawls the pages, runs Google's own speed test, and writes up what is slow, missing or broken as a report you can hand to somebody.

Read the source
FALA: a Portuguese learning app with a flashcard and progress counters.

FALA

Live app + source ·

A Brazilian Portuguese app: 240 cards on a spaced repetition schedule, native audio, and it keeps working with the plane on airplane mode.

Open the app Read the source
North Shore Net Sheet: a form asking which home we are running, with address, town and asking price.

Net Sheet

Working demo + source ·

What a seller actually walks away with after the payoff, the transfer tax, the attorney and the commission. Four questions, ninety seconds, and no phone number asked for.

Try it Read the source
A dark analytics dashboard, shown with sample data: page views, conversions and conversion rate across the top, then a table of traffic sources with a leads column beside each one.

First-party analytics

Running on this page + source ·

The conversion tracking behind this site, written rather than installed. A serverless collector, a private store, and a dashboard behind a key.

MoreLess

No third-party script and no cookies, so there is no consent banner to click. It is recording your visit right now.

Read the source

Written to be read

Each of these exists to answer a question an interview asks, and the answer is in the repository rather than in a sentence here. Three of the four run their tests on every push.

Punchboard signed in as the owner: a board of six construction jobs, each with a phase chip, crew and progress count.

Punchboard, with accounts

Source only · Postgres ·

The demo above keeps everything in one browser. This one has people in it: an owner, a crew, and a client who gets a revocable read-only link instead of an account.

MoreLess

Tenant isolation is a database rule rather than a habit, so the queries carry no org_id filter at all and 14 tests write them the careless way on purpose to prove nothing leaks. Not deployed: it wants a hosted Postgres.

Read the source
The rebuilt net sheet showing a completed estimate: sale price, commission, transfer tax, attorney, title and mortgage payoff, netting $465,550.

Net Sheet, rebuilt

Live app + source · TypeScript ·

The same calculator in Next.js and TypeScript, with the arithmetic pulled out as pure functions and tested hard: 61 tests, run on every push.

MoreLess

Writing them found two real bugs in the original, including a transfer tax computed as a flat percentage when the statute charges per five hundred dollars or part thereof.

Open it Read the source
Ask New York: a question in English, the SQL it generated shown in full, and the five rows it returned.

Ask New York

Live app + source · text to SQL ·

A question in English becomes one Postgres query, shown to you before it runs against the city's inspection records. It publishes how often it is wrong: fifty fixed questions, graded on the rows they return, averaged over three runs. It scores 39%.

MoreLess

Low on purpose. The fifty include joins, aggregates and trap questions written to be failed. The simple ones pass eight times in ten, and it refuses the unanswerable ones four times in five. Most demos show the three questions they get right. The guard that checks each query was taken apart by an adversarial run and rebuilt.

Ask it something Read the score
Asset Forge: a local generator with asset type presets, a subject field and a trained-model selector, reporting the engine ready and 8.9 of 10.7 GB of GPU memory free.

Asset Forge

Source only · local GPU ·

Game art generated on this desk rather than bought by the credit: a server that builds the workflows, a browser UI for the background cut and palette work, and a Blender pipeline that renders and captions a training set.

MoreLess

The cut and palette work happen client side so the original is never touched, and the training set teaches the model a specific look. It drives ComfyUI, Blender and kohya's trainer, which are about 32 GB and not mine, so the repository is the thousand lines that are.

Read the source

Games and 3DNot client work

Games, models, and photographs turned into 3D

Not client work, and I am not pretending otherwise. They are here because the hard parts of a game, physics that has to hold up, netcode, and making a thing feel good under your hand, are the same parts that decide whether a website is worth paying for. Three of the six games you can play in a browser right now. Under them: the ant models the first one runs on, then software that turns product photographs into something you can stand in your own room.

Vivarium: ground level inside a keeper tank, big-headed ants crowding the rim of a water dish beside a syrup feeder, more of them on the cup behind, and a wooden screen in the room beyond the glass.

Vivarium

Simulation · in development ·

A formicarium in a browser tab. A wild queen comes down from her nuptial flight, digs in, seals herself away and raises the first workers on her own body reserves. Every ant after that is an individual with an age, a job and a stomach.

MoreLess

The nest they dig is measured against published casts of real big-headed ant nests. The simulation is deterministic and snapshot-safe, so a saved tank replays tick for tick, and the ants in the modelling block below are the same rigs, drawn here at their real size, three millimetres for a minor. Three.js and WebGL, no engine.

Granulab: a falling sand sandbox with sand, water and acid piled in a dark instrument-panel interface.

Granulab

Playable ·

A falling sand sandbox in the Powder Game line. More than 40 materials with heat, fire and real chemistry between them, plus a maker for inventing your own element and its reactions. Nearly a million cells, 60 frames a second, no plugin.

Play it Read the source
Grubs TD: ant towers defending a pheromone trail across a red picnic blanket while bugs march in.

Grubs TD

Playable ·

A tower defense where the towers are ants and the trail runs across a picnic blanket. Six maps, one for each hour of the day. Every sprite is drawn in code and every sound is synthesised, so the whole game is a few hundred kilobytes and works offline.

Play it Read the source
Ant Raid: two nests at opposite ends of a dirt arena with a column of ants marching along the road between them.

Ant Raid

Multiplayer · source only ·

The other half of Grubs TD: you are the wave. Two colonies, three roads, sugar to spend on the ants you send and the ones you keep home. You get a room code and send it to a friend.

MoreLess

It needs a socket held open, so it cannot live on static hosting the way the rest of this page does. The whole thing, game server included, is on GitHub.

Read the source
Myrmidon: a team fight in an ant-themed MOBA, a scoreboard and minimap tracking two five-ant squads.

Myrmidon

Playable · in development ·

An ant colony MOBA: five against five, three lanes, a Queen to defend on each side. Twenty-four champions so far, each with its own body plan, kit and talents, played over a real connection with accounts, Elo and ranked seasons.

MoreLess

The simulation is deterministic, so the same seed replays a match tick for tick on any machine, which is what makes replays and a mid-game reconnect possible without trusting the client.

Free hosting sleeps between visits, so the first click can take twenty seconds to answer. This page nudges it awake as you scroll down.

Play it
Sporelings: a big cream mushroom with a face stands in a fairy ring of small brown mushrooms, pink spotted growers on either side, a mossy log with shelf fungus, a barrel and a compost heap behind.

Sporelings

Idle clicker ·

You poke a soft, toon-shaded mushroom. It squishes, puffs spores, and the spores buy growers that fill a little forest around it.

MoreLess

Every skin behaves like the material it looks like, measured in simulation: jelly jiggles for ages, velvet sinks like a pillow, clay keeps its dents. A bot plays the first hour of the economy and fails the checks if a player would ever wait five minutes for the next purchase. 274 tests, and a harness that plays it in a real browser. Three.js and TypeScript.

Modelled, rigged, rendered

Modelling and animation

From Vivarium, above. The ants are real geometry on a real skeleton, not sprites. Pick a caste below and drag it around, then watch the same three turn.

Drag to spin · scroll to zoom

The minor worker, the one that does most of the work in a real colony. 44,859 triangles, three texture maps and a clearcoat pass for the wet look of chitin. All three castes ride the same 59 bone skeleton, which is what lets one animation drive the whole colony.

Feet that stay put

Worker · walking to camera ·

The hard part of insect walking is that the foot has to stay where it landed while the body moves over it. Get that wrong and the ant skates.

The same three, turning

Turntable · silhouette check ·

Every model gets spun through a full circle before it is allowed near the game. It is the fastest way to catch a proportion that only reads from one angle.

Photographs in, AR asset out

Photo to 3D

Software I wrote that turns a few product photographs into a 3D asset a shopper can stand in their own room at true size. No scanning rig, no modelling contract, no per-model licence, and nothing leaves the building: every stage runs on one desktop. Below is a Shin Godzilla figure it made from four store photographs. Switch between what one photograph gives and what four give.

Drag to spin · on a phone, put it on your floor

Four photographs. Shape from all four through a multi-view model, colour from the front, then each photograph aligned to the model by silhouette and painted on where the surface faces its camera. The red lines down the flanks and the tail tip ship as emission, so they glow in a dark room. About ten minutes on one graphics card.

The front product photograph of the Shin Godzilla figure beside the finished model rendered from the same camera angle.

Same angle, photograph and model

Workflow · photographs, geometry, product asset ·

Left is the store photograph. Right is the model, rendered from the camera the software found for that photograph by matching silhouettes, not lined up by eye.

MoreLess

The stance, the glow lines and the claws land where they are in the picture. What the camera never saw is still the model's guess, and the page says so.

Four product photographs of the figure above four renders of the finished model from the front, right, back and left.

Four photographs in

The software · Node and Python, local GPU ·

Each photograph is segmented, aligned to the model by silhouette, and projected onto the texture where the surface faces its camera.

MoreLess

A photograph whose pose does not match is refused rather than smeared on, and one whose colours refuse to correspond is refused too. The back view here is the same mould in another colourway, used for shape only.

Case studiesLonger form

The hard part, written down

Four of these had a problem in the middle that took longer than the rest of the build put together. These are those parts: what the obstacle was, what I tried, and what the thing still cannot do.

Prices for a place that publishes none

Sold Nearby · open data

New York State publishes no individual sale prices for Nassau or Suffolk at all. The way out was a table almost nobody reads: the state's own published ratio of assessment to sale price, per town, per year.

Read the note

The browser that says everything is broken

This site · verification

The preview I build in reports a hidden document, so IntersectionObserver never fires and every scroll-revealed thing looks broken whether it is or not. How I check a change without trusting my eyes.

Read the note

A live map from a feed with no map in it

Trains Now · realtime

The MTA reports "stopped at 42 St", never a latitude. Sixty lines of protobuf decoding, then the published schedule to work out which two stations a moving train is between.

Read the note

One photograph to an AR asset

Photo to 3D · AR

A reconstruction model hands back shape and nothing else, and rebuilds the studio floor as a slab of geometry under the product. Finding that floor by width rather than by density is the part I am proudest of.

Read the case study Read the source

ContactSay hello

That is the work. If you want something built, write to me.

I read everything that arrives. Tell me what you are trying to make and I will tell you honestly whether I am the right person to make it.

I am Don Florencio, and Workflo is the name I build under. Websites, small tools and games out of New York and New Jersey, mostly alone and mostly in plain HTML, CSS and JavaScript. Everything on this page I made, and the source for a good deal of it is on GitHub. Thanks for looking.