<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://ahmednadar.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://ahmednadar.com/" rel="alternate" type="text/html" /><updated>2026-06-26T10:59:18+00:00</updated><id>https://ahmednadar.com/feed.xml</id><title type="html">Ahmed Nadar</title><subtitle>Toronto-based product builder. I ship Rails + AI apps that solve real problems for real people. SolveTO maps over 1 million civic assets across Toronto, Mississauga, and Milton. STL Agent helps GTA contractors stop losing $50K/year to slow follow-up.</subtitle><author><name>Ahmed Nadar</name></author><entry><title type="html">Fly over your city and watch it look after itself</title><link href="https://ahmednadar.com/fly-over-your-city/" rel="alternate" type="text/html" title="Fly over your city and watch it look after itself" /><published>2026-06-20T00:00:00+00:00</published><updated>2026-06-20T00:00:00+00:00</updated><id>https://ahmednadar.com/fly-over-your-city</id><content type="html" xml:base="https://ahmednadar.com/fly-over-your-city/"><![CDATA[<p>A city looks after itself in a thousand small acts nobody sees. A drain gets cleared. A burnt-out light comes back on. A pothole somebody reported on a Tuesday is gone by Friday. It happens around you all the time, and almost none of it is visible to the people it happens for.</p>

<p>I built something that makes it visible. It is called Pulse, and it is part of SolveTO, <a href="/crossing-city-lines/">live now for Toronto and Mississauga</a>. You sign in, and the city you walk through every day is sitting there in three dimensions, at night, <a href="/the-data-was-always-there/">rebuilt from its own public data</a> and the reports residents have filed. Not a stock map with pins dropped on top. Your actual city, rendered as itself.</p>

<p><img src="https://solveto.ca/blog/pulse-toronto-night.jpg" alt="Pulse, a living night map of Toronto" /></p>

<p>Then the reports arrive. Every issue residents have filed glows where it happened, and the map replays them through time. A street you know lights up. Then the one beside it. Then a corner across town you have never stood on, where somebody cared enough to report a problem you will never see in person. Weeks of civic life, compressed into something you can take in at a glance.</p>

<p>This is the part the old way of reporting was never built to show you. You file a report and it disappears into a system, and the work that follows happens in silence. Pulse turns that silence into something you can watch from above.</p>

<h2 id="take-the-controls">Take the controls</h2>

<p>There is a guided tour that flies you through the city’s real story with sound. You sit back, and the city tells you what has been happening in it. Where the reports cluster. Where a season of residents paying attention actually looks like from a few hundred feet up. Get down low and the city is alive under you. Cars move along the streets you know. A red and white streetcar rolls past and you hear it rumble by. People are gathered where people actually gather, outside City Hall, down in the Distillery District, at the foot of the CN Tower.</p>

<p>I will admit <a href="https://solveto.ca/blog/fly-over-your-city">the first time I flew it down over the lake toward downtown I did the Superman arms at my desk</a>. The cape comes off fast, though, because what you are flying over is not a game. It is every problem your neighbours reported and every one the city went back and fixed.</p>

<p>I should be honest about the controls, because the experience is not identical everywhere. On a desktop you take the controls and fly it yourself, anywhere you want, as long as you want. On a phone the tour does the flying for you, and you can still drag to look around and pinch to zoom into the 3D city. The full hands-on flight is a desktop thing for now. The wonder is on the phone too. The cockpit is on the bigger screen.</p>

<h2 id="when-a-report-turns-green">When a report turns green</h2>

<p>The reports do not just sit there glowing. They get fixed. When one does, the map throws a small celebration. The animation kicks in, a crew rolls up to the spot, the work happens, and a flag goes up where everyone flying past can see it. The city saying thank you, out loud, in lights.</p>

<p>The crews doing that work are doing real work, and a lot of the time it is not the city’s own staff. It is a contractor, a private company, someone who showed up and fixed the thing and almost never gets named for it. I want that to change. The flag that says a report was solved should be able to carry the name of whoever solved it.</p>

<p>That is the loop the old way never closed. You report a problem, and if you are lucky the problem goes away, but you rarely find out, and you almost never see who made it go away. On Pulse you watch the glow turn green, you see the flag go up, and the fix stops being a rumour. It becomes a thing that happened, in <a href="https://solveto.ca/blog/the-intersection-everyone-saw">a place you recognize, that you can point at</a>.</p>

<h2 id="why-it-had-to-be-the-real-city">Why it had to be the real city</h2>

<p>I could have shown all of this as a chart. Reports filed, reports closed, a line going up. Nobody flies over a chart. Nobody recognizes their own street in a bar graph, and recognition is the whole point. The map only works because it is your city. You find your street, you find the building you walk past every morning, and the glows stop being data and start being your neighbours.</p>

<p>A few buildings on the map carry a name. The Reference Library carries mine. When I put my name on a building I care about, the map stopped being a product I built and started being a neighbourhood I belong to. That is the feeling I am after for everyone who flies over it. A city that feels like yours instead of a place you happen to live.</p>

<h2 id="what-i-am-actually-showing-you">What I am actually showing you</h2>

<p>Reporting a problem is an act of faith. You send something into the city and you have to believe it lands somewhere, that someone reads it, that the street gets better because you bothered. Most of the time you never see the proof, so most people stop believing, and once they stop believing they stop reporting. The city then fixes what gets reported, and almost nothing gets reported, and you can see where that leaves your street.</p>

<p>Pulse is the proof. It is thousands of those small acts of faith lit up across a city that is quietly answering them. Not residents against the city, and not the city ignoring residents. A city and the people in it looking after the same streets, finally visible doing it together.</p>

<p>None of this replaces the report you file or the call you make to 311. Pulse sits alongside all of that and shows you what it adds up to. The reports still reach the city the same way they always did. The only new thing is that now you can stand above your whole city, watch the glows turn green one at a time, and know that some of them are green because of you.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="pulse" /><category term="civic-tech" /><summary type="html"><![CDATA[A living 3D map of Toronto and Mississauga where the reports residents file glow where they happened and turn green when the work gets done. You can fly over it and watch the city quietly fix itself.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Milton is live, and the report already knows your street</title><link href="https://ahmednadar.com/milton-is-live/" rel="alternate" type="text/html" title="Milton is live, and the report already knows your street" /><published>2026-06-17T00:00:00+00:00</published><updated>2026-06-17T00:00:00+00:00</updated><id>https://ahmednadar.com/milton-is-live</id><content type="html" xml:base="https://ahmednadar.com/milton-is-live/"><![CDATA[<p>A few hours ago a resident in Milton filed a report about a dip in the road that turns into a puddle in the rain and a sheet of ice in the winter. A minute later it was in front of the Town and in front of their ward councillor, with the location, the photo, and the surrounding street attached. They did not fill out a form they had to find first. They did not call a line and wait. They reported it the way you report anything else now, in the time it takes to send a text.</p>

<p>That is what went live in Milton today, and it is the same thing I built for <a href="/crossing-city-lines/">Toronto and then Mississauga</a>: one door instead of five, and a report that stays visible after you knock.</p>

<!-- IMAGE: A SolveMILTON report on a phone showing a Milton street with the location and surrounding assets already attached, beside the Toronto and Mississauga logos. Add to /assets/images/posts/ and reference as https://ahmednadar.com/assets/images/posts/milton-is-live.png -->

<h2 id="the-report-already-knows-the-town">The report already knows the town</h2>

<p>Most reporting tools start empty and ask you to describe everything from scratch. SolveMILTON starts the opposite way. Before a single resident touched it, the platform already knew Milton’s parks, its schools, its fire stations, its town facilities, and its parking lots. So when you report a problem, you are not typing an address into a void. You are pointing at <a href="/418000-assets-one-map-and-why-it-matters/">a place the system already understands</a>, and the report carries the details of the issue and what sits around it.</p>

<p>That means a resident in Milton can report a problem at a park, a school, a fire station, a town facility, or a parking lot in under 30 seconds, and the people on the other end open something specific instead of something vague. Specific reports get acted on. Vague ones get lost.</p>

<h2 id="it-stays-public-and-it-stays-yours">It stays public, and it stays yours</h2>

<p>The part that breaks most civic reporting is not the reporting. It is <a href="/crossing-city-lines/">the silence after</a>. You send something in and never hear back, so you learn the lesson the system is teaching, that reporting is pointless, and next time you say nothing.</p>

<p>SolveMILTON closes that loop. Every report is public. You can follow it as it moves, add a comment, and share it with the people on your street who drive past the same problem. A single complaint is easy to lose. A street full of residents pointing at the same broken thing is a pattern, and a pattern is something a town has to answer for.</p>

<h2 id="milton-makes-three">Milton makes three</h2>

<p>Toronto first, to prove the model. Mississauga next, to prove it crosses a city line. Milton now, because the hardest part of a civic platform was never one more city. It was building one that does not start over every time a resident moves or a new town comes online. Milton came online knowing its own streets on day one.</p>

<p>The crews in Milton already do the work. What was missing was the moment where a resident knows they were heard and can watch the thing get fixed. That moment exists in Milton now, and soon you will be able to <a href="/fly-over-your-city/">fly over it and watch it turn green</a> like the cities before it.</p>

<p>So this is day one, and I am building the rest of it with the people who live there. Milton, tell me what your town needs next.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="milton" /><category term="multi-city" /><category term="civic-tech" /><summary type="html"><![CDATA[SolveMILTON is live. A Milton resident can report a problem at a park, school, fire station, town facility, or parking lot in under 30 seconds, and the report already knows where it is and what surrounds it. Here is what that actually changes.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Crossing city lines</title><link href="https://ahmednadar.com/crossing-city-lines/" rel="alternate" type="text/html" title="Crossing city lines" /><published>2026-06-16T00:00:00+00:00</published><updated>2026-06-16T00:00:00+00:00</updated><id>https://ahmednadar.com/crossing-city-lines</id><content type="html" xml:base="https://ahmednadar.com/crossing-city-lines/"><![CDATA[<p>There is a pothole I swerved for months on my street in Toronto, and the only reason I never reported it is that reporting it took longer than living with it. So in February I built a way to do it in about thirty seconds. You take a photo, the report writes itself, and it reaches the city and your councillor with the location and the details already filled in. I called it SolveTO and figured it was my own private annoyance.</p>

<!-- IMAGE: One account switching cities in a dropdown, Toronto to Mississauga to Milton, report history following along. Add to /assets/images/posts/ and reference as https://ahmednadar.com/assets/images/posts/crossing-city-lines.png -->

<p>It was not. Within weeks hundreds of Torontonians were using it, and the replies all said the same thing, people naming their own street and their own form they had given up on. Then people outside Toronto started asking when it was their turn.</p>

<p>That question turned out to be the whole story.</p>

<p>If you live in one city and work in another, you cross a line on the map every day without thinking about it. The pothole on Lakeshore West <a href="https://solveto.ca/blog/one-pothole-two-cities">feels the same whether it sits in Toronto or in Mississauga</a>. The broken streetlight outside the office does not care which municipality owns the bulb. The line means nothing while you are driving across it.</p>

<p>The line only matters the moment you decide to report any of it. In one city you find one form, one inbox, one process to remember. In the next city you find a different one, and most people never bother learning the second system, not because they stopped caring but because the first one already asked too much of them.</p>

<p>That is the part I refused to accept. So SolveTO went live in Mississauga as SolveSAUGA, and then in Milton as SolveMILTON, and none of them are separate products. <a href="https://solveto.ca/blog/from-one-city-to-one-platform">They are one platform</a>. One account works in every city, one login, one report history, one feed of what is near you. You switch cities in a dropdown and your reports follow you, your settings follow you, the map changes and the logo changes and the experience does not. A resident should never have to relearn how to report a problem just because they moved or drove across a town line on their way home.</p>

<p>Toronto proved the model. Mississauga proved it crosses a city line. Milton proved the part that was actually hard, which was never one more city. It was building one platform that does not start over every time a resident moves or a new town comes online. <a href="/milton-is-live/">Milton came online knowing its own parks</a>, its own schools, its own fire stations, its own streets on day one, so a resident there points at a place the system already understands instead of typing an address into a void.</p>

<p>Across all three cities the platform now tracks well over a million pieces of public infrastructure on one searchable map, all of it from public open data. That is the easy half of the work. The harder half is the half the city almost never finishes, and it is the same gap in every city I have launched in.</p>

<p>You report a broken thing. <a href="https://solveto.ca/blog/the-city-fixes-things-and-tells-no-one">The city goes quiet</a>. The thing stays open on your screen, and you are left wondering if anyone ever read it.</p>

<p>I lived this myself. A crack opened on College Street in April, I reported it, and the next time I walked past it was gone, fresh asphalt, patched. No email, no text, no word that anything had happened. The work got done and the report I filed sat there still open, like nobody ever saw it. So I marked it resolved by hand, my own report, one at a time. The crews are good and the city does the work, this is not a shot at the people patching the road. The gap is not the labour. The gap is that the one moment you actually care about, the it is done, you were heard moment, never reaches you.</p>

<p>When that moment never comes, you learn the lesson the system has been teaching you. Reporting things is pointless. So next time you say nothing.</p>

<p>There is a louder version of the same silence, where the city does not go quiet but tells you the job is done when it never was. I watched a Toronto report get stamped Completed the day after it was filed, with no inspection, no work scheduled, and a quiet handoff to someone else. The redirect was fine. The stamp was the problem. <a href="https://solveto.ca/blog/completed-does-not-mean-fixed">Completed on that screen is not a description, it is a metric</a>, and the moment a handoff gets counted as Completed the close rate stops measuring things that got fixed and starts measuring things that got relabeled. A resident who reads Completed and then walks past the same broken trail a week later learns the same lesson the silence teaches, that the status is not the truth.</p>

<p>So that is the half of the problem the platform exists to hold, in every city at once. A report does not end when the city says so. It ends when the people who live there say so. Every report stays public, you can follow it as it moves, add a comment, and show with your own photo whether the thing actually got fixed. A single complaint is easy to lose. A street full of residents pointing at the same broken thing is a pattern, and a pattern is something a town has to answer for.</p>

<p>SolveTO complements 311, it does not replace it. The reports still go to the city, the crews still do the work, and when they do we say so and we mean it. What the platform adds is the part the system skips, the resident knowing they were heard and <a href="/fly-over-your-city/">watching the thing get fixed</a>, said out loud where everyone can read it.</p>

<p>A pothole is a pothole in a town of five thousand and a city of three million, which is why the same platform fits either one and every place between them. The map already crosses city lines and it was <a href="/canadas-civic-layer/">built to hold the rest of the country</a>. The technical work is done. Whether a resident in any Canadian city gets to report a broken thing in thirty seconds, from the same account, and actually hear back when it is fixed, was never a technical problem. It is a choice, and I have already made mine.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="multi-city" /><category term="civic-tech" /><summary type="html"><![CDATA[A pothole feels the same in two cities, but the moment you report it the city line decides everything. I built one platform that crosses that line, and that does not relearn its job every time a resident moves.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Canada’s civic layer is one job away from done</title><link href="https://ahmednadar.com/canadas-civic-layer/" rel="alternate" type="text/html" title="Canada’s civic layer is one job away from done" /><published>2026-05-12T00:00:00+00:00</published><updated>2026-05-12T00:00:00+00:00</updated><id>https://ahmednadar.com/canadas-civic-layer</id><content type="html" xml:base="https://ahmednadar.com/canadas-civic-layer/"><![CDATA[<p>Singapore built OneService and solved something Canada still hasn’t. One app, one login, one interface for every city in the country. A resident reports a pothole, a noisy site, a flooded drain, and the same flow finds the right agency every time. Move across the island and you don’t relearn anything, because the system was never built around one city to begin with.</p>

<p>I keep coming back to that, because it is the cleanest version of the thing I am trying to say. Singapore is not richer than Canada, not better staffed, not sitting on some piece of technology we can’t buy. <a href="https://solveto.ca/blog/canada-47-the-gap-is-not-resources">The difference is not resources</a>. The difference is that someone decided the civic layer should be one thing instead of a thousand.</p>

<!-- IMAGE: A single map spanning Toronto and Mississauga with one login badge, the seam between cities dissolving. Add to /assets/images/posts/ and reference as https://ahmednadar.com/assets/images/posts/canadas-civic-layer.png -->

<p>Canada took the other path, and not because anyone chose it. We arrived here by accumulation. Every municipality procured its own platform, signed its own vendor agreements, and trained its residents on its own forms. The result is a country where moving from one city to the next means starting over with a completely different system for the exact same broken curb.</p>

<p>Nobody designed it that way. It happened contract by contract, over decades of project-based thinking that funded launches but never funded scale. A grant pays to build a tool for one city. It does not pay to connect that tool to the next city, so nothing connects, and the resident is the one who pays for the seams.</p>

<p>I have lived inside those seams. I have reported a pothole in one city, learned the form, memorized the inbox, and then moved and watched all of it evaporate. The street was the same. The problem was the same. The only thing that changed was that I no longer knew who to tell, so eventually I stopped telling anyone. That is not apathy. That is friction doing exactly what friction does.</p>

<p>The mistake everyone makes is reading this as a money problem or a technology problem. It is neither. The tools to read a photo, route a report, and track it through to a fix have been <a href="/the-data-was-always-there/">sitting on the shelf, available to anyone, for years</a>. What was missing was never the engineering. What was missing was the imagination to treat fifty cities as one problem instead of fifty.</p>

<p>So I built it that way from the start. SolveTO began with a single pothole in Toronto, but it was never a Toronto app. The login, the flow, the report history, the asset map underneath it, all of it was built to absorb the differences between cities so the resident never has to. When I extended it to the next city, the technical work was small. The strategic work, the deciding that this was one platform and not two, was the whole thing, and that decision was made on day one.</p>

<p>Today SolveTO tracks nearly a million pieces of public infrastructure across Toronto and Mississauga. One resident, one login, the same thirty-second flow on both sides of a municipal line that residents were told they could not cross. <a href="/crossing-city-lines/">The platform already works across city lines</a>. That part is done.</p>

<p>I want to be precise about what this is and what it isn’t. SolveTO does not replace 311, and it never has. It is the fastest front door to it. Every report a resident files still lands in the city’s own systems, with the crews who do the actual work, because those crews are doing the work and deserve the report cleanly and quickly. What SolveTO removes is the friction between seeing a problem and the city knowing about it, and the silence after, the loop that the old systems almost never close.</p>

<p>The cities themselves are starting to describe the same future I am already running. I have read the roadmaps: submit and track on your phone, smarter categories, a public map, closing the loop. <a href="https://solveto.ca/blog/toronto-311-plan-2027-i-shipped-it-in-february">The targets land in 2027</a>. A plan for something that runs today is not a roadmap, it is a description of the present written as if it were the future. The technology was never the gap. The gap is who moves, and how fast.</p>

<p>That is the part I find hard to let go of. The benchmark exists. Singapore is not a thought experiment, it is a country that decided years ago that civic life deserved one front door, and then built it. Canada has the talent, the data, and now a platform that has already proven it crosses the lines everyone said it couldn’t. What is left is not invention. What is left is the decision to finish.</p>

<p>Picture it carried out. A resident moving from Toronto to Calgary keeps their report history. A student moving to Waterloo doesn’t learn a new system. A visitor in a city they don’t live in still reports the broken sidewalk they happened to walk past, because the platform doesn’t care where they pay rent. For the first time there is a live, national record of what is broken and how fast each place fixes it, sitting in the open instead of locked behind a records request and three months of waiting. Provinces see which cities keep failing their residents. Money follows the signal instead of the lobbying.</p>

<p>None of that requires Canada to become Singapore overnight, and it won’t. A top-down national platform is not coming here, our federation will not build it, and I have stopped waiting for it to. This gets built the way it has already started getting built, one place at a time, free for the public, paid for by the institutions that own the infrastructure, until the seams quietly disappear.</p>

<p><a href="https://solveto.ca/blog/civic-intelligence-canada-needs">The civic layer Canada needs</a> is not a thing we have to invent. It is a thing we have to connect. The platform already crosses city lines, and Canada’s civic layer just needs someone to finish the job.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="canada" /><category term="civic-tech" /><summary type="html"><![CDATA[Singapore built one civic platform for the whole country. Canada built one per city, not by design but by accumulation. The gap is connection, not money, and the platform already crosses city lines.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The data was always there</title><link href="https://ahmednadar.com/the-data-was-always-there/" rel="alternate" type="text/html" title="The data was always there" /><published>2026-04-20T00:00:00+00:00</published><updated>2026-04-20T00:00:00+00:00</updated><id>https://ahmednadar.com/the-data-was-always-there</id><content type="html" xml:base="https://ahmednadar.com/the-data-was-always-there/"><![CDATA[<p>A few weeks into building SolveTO, someone mentioned that Toronto’s council voting records were sitting on open data. I went looking, expecting a gap. Instead I found everything. Meeting minutes, motion text, vote tallies councillor by councillor, going back years. All public, all free, and all buried in PDFs written for parliamentary procedure rather than for a resident trying to understand what happened last Tuesday.</p>

<p>That moment changed how I think about this whole project. I had assumed the hard part was getting the information. The hard part was that the information already existed and nobody could use it.</p>

<!-- IMAGE: One searchable map of Toronto's public assets with a council vote tally and a TTC stop popup beside it. Add to /assets/images/posts/ and reference as https://ahmednadar.com/assets/images/posts/data-was-always-there.png -->

<p>The council records are the clearest example. The official version runs to hundreds of pages, with agenda items numbered like EX29.4 and language that assumes you have read Robert’s Rules of Order. There is no plain-language summary, no picture of who voted which way, no way to filter to every time council discussed potholes or transit or parks. The data is there. The understanding is not. When you can see that <a href="https://solveto.ca/blog/every-meeting-every-motion-every-vote">your own councillor voted against a motion to investigate why Toronto roads fall apart so fast</a>, a motion that failed nine to thirteen, you walk into the next community meeting with a specific question for a specific person. That is not politics. That is just knowing what happened and who decided it. SolveTO points you at the readable version and links straight back to the official record on toronto.ca, so you decide how far in you go. It complements 311 and the city’s own portal, it does not replace either.</p>

<p>The same thing happens at the level of a single street. SolveTO now has <a href="https://solveto.ca/blog/1300-pages-from-one-database">more than 1,300 pages</a>, and almost none of that is new content I invented. It is the wards, the issue types, and the councillors the city already publishes, turned into pages that answer the questions people actually type. If you search for potholes on the Danforth, there should be a page with real numbers for that ward: how many were reported, how many were resolved, what the response time looks like. Before, that page did not exist anywhere on the internet. Now it does, and it is backed by real community reports, not filler. The records were always public. They just had no door a resident could walk through.</p>

<p><a href="https://solveto.ca/blog/your-bus-stop-has-a-story">Your bus stop is the same story</a> told one more way. When a streetlight or a sidewalk breaks, you report it to 311. When your route gets diverted or suspended, the TTC publishes a service alert on its own website. For a resident, these two have never been in one place. You check one app for the street and another for the bus, and you are the one stitching the picture together every single time, because the TTC is a separate agency from the city and neither system feeds the other in public. SolveTO now shows every TTC stop on the same map, turns the stops red when their route has an active alert, and lets you tap a stop to see exactly what is happening. If the bench is broken or the shelter is smashed, you report it right there, and that report goes to both 311 and the TTC, which actually owns the stop. Before, that report reached only 311 and the agency that owns the thing never got a copy.</p>

<p>None of these are new datasets. They are existing public records that lived in separate rooms, and the work was opening the doors between the rooms.</p>

<p>Once you see it that way, the boundary of a city stops looking special. A campus has sidewalks, streetlights, benches, bins, and a door that sticks every time it rains. So does a hospital ground, a downtown business district, a network of trails. Each one is <a href="https://solveto.ca/blog/your-property-is-a-small-town">a small town with a fence around it</a>, full of people who notice when something breaks and have no fast way to tell whoever fixes it, so it sits. A city is just one shape on a map. Your campus is another shape, your district is another, and the same map and the same pins work the moment you draw one more boundary around your property.</p>

<p>Login is part of that on purpose. A report carries a real person’s voice to the people who can act on it, and the loop only closes when there is someone to tell that it is done. That accountability is the point, not friction for its own sake.</p>

<p>I keep coming back to the fact that I did not have to collect almost any of this. The voting records, <a href="/418000-assets-one-map-and-why-it-matters/">the infrastructure counts</a>, the transit alerts, the ward boundaries were all public the whole time. They were just scattered across separate systems, written for procedure, and impossible to hold in one view. The value was never in gathering something new. It was in <a href="/canadas-civic-layer/">connecting what was already there</a> until a resident could finally see their own street whole.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="open-data" /><category term="civic-tech" /><summary type="html"><![CDATA[Most of what a resident needs to understand their own street is already public. It was just scattered, unconnected, and written for procedure instead of people. The value was never in collecting it. It was in connecting it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Two product decisions that respect the person on the other side of a report</title><link href="https://ahmednadar.com/dignity-and-friction/" rel="alternate" type="text/html" title="Two product decisions that respect the person on the other side of a report" /><published>2026-04-04T00:00:00+00:00</published><updated>2026-04-04T00:00:00+00:00</updated><id>https://ahmednadar.com/dignity-and-friction</id><content type="html" xml:base="https://ahmednadar.com/dignity-and-friction/"><![CDATA[<p>I think about civic reporting as a relationship between two people who never meet. One person sees something wrong on the street and decides to say something. Another person, somewhere in the photo, never asked to be part of it. Most reporting tools forget that both of them exist. I built two decisions into SolveTO that start from the opposite assumption, that both deserve respect, and over time I realized they were the same decision wearing two faces.</p>

<!-- IMAGE: Split frame, a blurred face shielded in a report on one side, the one-tap Snap voice flow on the other. Add to /assets/images/posts/ and reference as https://ahmednadar.com/assets/images/posts/dignity-and-friction.png -->

<p>The first one came from a report I will not forget. Someone flagged a person sleeping rough on a sidewalk. The photo was clear, the face was visible, and it went out to the city and a ward councillor completely exposed. The person submitting it had good intentions. They were asking for help, not publishing a portrait of someone at the lowest point of their life. But the software treated that face like it treated a pothole, as just another pixel to pass along, and that is a failure of care, not a feature gap.</p>

<p>When the issue is a person, the photo is different from every other kind of report. The person in it did not consent to being photographed and did not ask to be in a civic record. So I made <a href="https://solveto.ca/blog/every-face-deserves-dignity">face protection automatic</a>. Every face that ends up in a report, the subject of it and any bystander who happened to be in frame, gets shielded before that report is stored or sent anywhere. Nobody is exposed to a city official, a councillor, or anyone else. And when the issue is someone experiencing homelessness, the standard is stricter still. If a face cannot be protected, the report does not go out. It waits. There is no version of “close enough” when <a href="/every-face-in-a-civic-report-deserves-dignity/">a person’s dignity is the thing at stake</a>.</p>

<p>That is not the kind of work that shows up on a dashboard. It will not increase a single number anyone tracks. But it is the baseline I am unwilling to ship without, because the person submitting the report trusted the system to handle it well, and the person in the photo had no say at all. The software has to protect both of them. That is the floor, not the ceiling.</p>

<p>The second decision looks like the opposite problem and turns out to be the same one. My wife spotted a pothole while driving and took a photo through the windshield, blurry, at an angle, from a moving car. It failed. And the lesson was not that she did it wrong. The lesson was that the process asked too much of her. Spot the issue, pull over, get out, frame a clear photo, open the app, fill out a form with location and category and description, then submit. Seven steps for a pothole. No wonder almost nobody does it.</p>

<p>People are not apathetic about their city. They are busy. The form takes five minutes, most people do not have five minutes, so nothing gets reported, and <a href="/week-one-in-the-open/">the city fixes what gets reported</a>. You can see where that goes. The bottleneck was never that residents do not care. It was that caring cost more than it was worth, every single time.</p>

<p>So I <a href="https://solveto.ca/blog/why-snap-exists">built Snap to remove the cost</a>. You tap once, you speak a sentence like “big pothole on Don Mills near the gas station,” and you are done in about ten seconds. No photo to frame, no form to fill, no map to scroll, no waiting on a spinner while you sit at a green light. Your voice carries everything the city actually needs, the what and the where, and the rest happens after you have already put your phone down and driven on. When several people flag the same spot, those voices stack into something a single report never could, real evidence from the people who drive those roads every day. None of this replaces 311. It feeds the same crews the same information, just through a door that opens.</p>

<p>What ties the two together is the question I now ask before building anything. Who is on the other side of this report, and does the design respect them. The face redaction respects the person who cannot speak for themselves in the photo. Snap respects the person who wants to help but has ten seconds, not five minutes. One protects someone from the system, the other invites someone into it, and both refuse to treat a human being as just another input to process.</p>

<p>I am building this myself, at night, instead of waiting for the city to get to it, because these are the decisions that get cut first when you optimize for metrics. A face stays private not because it moves a number but because it is a person. A report takes ten seconds not because speed is impressive but because friction is what kept good people silent for years. Respect the human on the other side, and the rest of the product follows from there.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="privacy" /><category term="civic-tech" /><summary type="html"><![CDATA[Protecting the dignity of every face in a civic report, and removing the friction that stops people from reporting at all. Both are about respecting the human behind the report.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Week one: SolveTO launched, and the city noticed</title><link href="https://ahmednadar.com/week-one-in-the-open/" rel="alternate" type="text/html" title="Week one: SolveTO launched, and the city noticed" /><published>2026-03-24T00:00:00+00:00</published><updated>2026-03-24T00:00:00+00:00</updated><id>https://ahmednadar.com/week-one-in-the-open</id><content type="html" xml:base="https://ahmednadar.com/week-one-in-the-open/"><![CDATA[<p>I launched SolveTO ten days ago expecting a quiet first week, the kind where you watch a few friends try the thing and then you go back to fixing the parts that break. That is not what happened. Reports started coming in from wards I had never set foot in, residents I had never met sending photos of potholes and broken sidewalks and storm drains nobody had bothered to report before. By the end of the week the count sat at <a href="https://solveto.ca/blog/week-1-recap">sixty-seven reports across twenty wards</a>, and three of those were already confirmed fixed by the people who live near them.</p>

<!-- IMAGE: Before-and-after of a pothole report (reported, then spray-paint, then repaired) or a montage of the five news outlet logos. Add to /assets/images/posts/ and reference as https://ahmednadar.com/assets/images/posts/week-one-recap.png -->

<p>The pattern underneath those numbers is the whole reason I built this. Reporting an issue to the city the official way takes five pages and twenty-something form fields, and most people do not have that kind of time for a pothole they have already learned to swerve around. So they walk past it, the city fixes what gets reported, and almost nothing gets reported. SolveTO turns a new report into a thirty-second job and adding your voice to an existing one into fifteen seconds. Give people a faster door and they walk through it, no ads, no pitch, just a process that did not cost them their afternoon.</p>

<p>Then <a href="https://solveto.ca/blog/from-cbc-to-global-news-one-week-of-coverage">the media week arrived, and it arrived all at once</a>. In two days the story ran on CBC Metro Morning, Global News at six, NOW Toronto, Toronto Today, and a national radio show that carries across Corus stations from Calgary to Vancouver. Every interviewer asked me the same question in the same skeptical tone: why not just use 311? My answer never changed. SolveTO complements 311, it does not replace it. The crews doing the actual repairs are doing real work, and the city wants the reports too. The problem was never the city’s willingness to fix things, it was <a href="/dignity-and-friction/">the friction sitting between a resident and the moment they could tell anyone at all</a>.</p>

<p>Toronto Today did the most useful thing of anyone that week. They ran their own test instead of taking my word for it, timing the same report through SolveTO, through the city’s online form, and through the 311 phone line. SolveTO took two minutes, the form took five, the phone took seven. That comparison did more for the argument than anything I could have said into a microphone, because it was theirs, not mine.</p>

<p>The question I could not answer cleanly during those interviews sent me down a different path entirely. People kept asking what happens after a report leaves SolveTO, and whether the city sends back a case number you can track. So I spent a day testing every major Canadian city’s reporting API, looking for one, just one, that would let me submit a request and get a reference back. <a href="https://solveto.ca/blog/no-canadian-city-has-a-working-311-api">I found zero</a>. Toronto’s was retired and now returns an error. Ottawa’s server is simply gone. Quebec City’s security certificate expired. Most cities never built one at all and run everything through an app or a phone tree. The civic reporting layer of an entire country is, for the most part, still running on email.</p>

<p>That changes who is responsible for closing the loop. If the city does not report back when something is fixed, then the only people who can confirm it are the residents standing in front of it. That is exactly how community verification has worked elsewhere for nearly two decades, and it is how those three fixed reports got marked fixed this week. One pothole went from reported, to orange spray paint within a day, to fully repaired within two, with the before-and-after sitting right on the report page for anyone to see. Nobody at city hall told me. A neighbour did.</p>

<p>But verification needs something to hold onto, and that is the gap the API research forced me to close. If I cannot hand you a city case number, I can at least hand you mine. So <a href="https://solveto.ca/blog/every-report-now-has-a-reference-number">every report now gets its own reference</a>, something like STO-A3F7K2, generated the moment you file it and yours permanently. You click Track in the header, paste it in, and your report comes up with its photo, status, and timeline. I am careful to say what it is and what it is not: it is a SolveTO identifier, not a City of Toronto case number, and if the city ever starts handing out their own, I will show both side by side. Login is still required to file, but the reference travels with you and you can share it with a neighbour or your councillor without anyone logging in to see it.</p>

<p>That is the thread the whole week kept pulling on. The reports proved people will act when the door is easy. The coverage proved the frustration was never just mine. The API search proved no city is going to close the loop for us yet. And the reference number is the smallest honest thing I could build to start closing it ourselves. The media attention brought people in, but the day after CBC I was back writing code, because attention validates an idea and only the product keeps earning it. Week one did not prove SolveTO works forever. It proved the friction was the whole story, and that the moment you remove it, a city full of people who supposedly do not care turns out to care quite a lot.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="toronto" /><category term="civic-tech" /><summary type="html"><![CDATA[Ten days after launch, residents filed reports across twenty wards, five outlets ran the story, and I learned no Canadian city has a working 311 API. So I gave every report its own reference number.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">418,000 assets, one map, and why it matters</title><link href="https://ahmednadar.com/418000-assets-one-map-and-why-it-matters/" rel="alternate" type="text/html" title="418,000 assets, one map, and why it matters" /><published>2026-03-10T00:00:00+00:00</published><updated>2026-03-10T00:00:00+00:00</updated><id>https://ahmednadar.com/418000-assets-one-map-and-why-it-matters</id><content type="html" xml:base="https://ahmednadar.com/418000-assets-one-map-and-why-it-matters/"><![CDATA[<p>Toronto has been collecting infrastructure data for decades. Catch basins from the 1840s. Fire hydrants. Traffic signals. Sewer networks. Transit shelters. Litter bins. Power outage feeds from Toronto Hydro. Road closures updated every hour.</p>

<p>All of it is public. All of it is free. It’s sitting on <a href="https://open.toronto.ca">open.toronto.ca</a> right now.</p>

<p>But here’s the thing. If you’re a resident who just watched water pool into the street after a storm, you don’t know that data exists. If you’re a city worker who gets dispatched to fix a drain, you don’t know there’s a road closure two blocks away that’ll double your travel time. If you’re a councillor trying to understand why your ward keeps flooding, you don’t have a map that shows every catch basin and sewer manhole in one view.</p>

<p>The data was always there. It just wasn’t connected.</p>

<h2 id="what-changed">What changed</h2>

<p>Over the past week, I pulled 11 public datasets into <a href="https://solveto.ca">SolveTO</a> and built them into a single interactive map. Every asset is clickable. Every asset is reportable. Every report includes the infrastructure context around it.</p>

<p>418,000+ assets in total. But the numbers aren’t the point. The connections are.</p>

<h2 id="what-a-connected-report-looks-like">What a connected report looks like</h2>

<p>Let me walk you through what happens when someone reports a flooded street.</p>

<p>A resident sees water pooling at an intersection. They open SolveTO, tap the nearest catch basin on the map, and say “this drain is blocked, water is flooding into the road.” Fifteen seconds. Done.</p>

<p>The city doesn’t get a vague complaint. They get a report with everything they need to act. The exact location. A photo. A clear description. And the kind of context that would normally take someone 20 minutes to pull together manually.</p>

<p>Compare that to a 311 call: “There’s flooding somewhere near Main and Danforth.” Someone on the city side has to figure out which drain. Pull up a map. Match the description. Hope they got the right one.</p>

<p>That’s the gap this fills. One report with everything attached, ready to act on.</p>

<h2 id="the-same-thing-works-for-toronto-hydro">The same thing works for Toronto Hydro</h2>

<p>A streetlight goes out on a residential street. It happens all the time. Nobody calls it in because who has time to find a phone number, describe a location, and wait on hold?</p>

<p>But a resident walking by can tap the pole on the map, say “light is out,” and a report goes directly to the right place. Everything the crew needs to respond, in one message.</p>

<p>Before that, it was just a dark street nobody reported.</p>

<h2 id="why-this-matters-beyond-reporting">Why this matters beyond reporting</h2>

<p>I want to be honest about what I’m trying to do here.</p>

<p>This isn’t just a reporting tool. Reporting is the action, but the real goal is something bigger. I want residents to know their city better.</p>

<p>When you know what’s around you, you stop just complaining and start reporting with context. Your voice carries more weight because the information behind it is specific, verifiable, and actionable. A city worker reads that report and thinks: this person knows what they’re talking about. Let me act on this.</p>

<p>That changes the dynamic from frustration to cooperation.</p>

<h2 id="the-bridge">The bridge</h2>

<p>Here’s what I believe. The gap between residents and the city isn’t about anger or apathy. It’s about information. When a resident reports “there’s a pothole on my street,” that’s frustration. When a resident reports with precise location, photos, and context that makes the problem immediately actionable, that’s cooperation.</p>

<p>SolveTO is the bridge. It takes publicly available data that already exists, presents it in a way residents can actually understand, and turns every report into something the city can act on immediately.</p>

<p>Not residents versus the city. Residents working with the city. Both sides getting what they need. Both sides saving time.</p>

<p>The data was always there. Now it’s connected. And every report that flows through it makes the next one more useful.</p>

<p><a href="https://solveto.ca">solveto.ca</a></p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="toronto" /><category term="civic-tech" /><category term="open-data" /><summary type="html"><![CDATA[Toronto has been collecting infrastructure data for decades. Catch basins, hydrants, traffic signals, sewer networks. All public. All free. None of it was connected. Until now.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Every face in a civic report deserves dignity</title><link href="https://ahmednadar.com/every-face-in-a-civic-report-deserves-dignity/" rel="alternate" type="text/html" title="Every face in a civic report deserves dignity" /><published>2026-03-08T00:00:00+00:00</published><updated>2026-03-08T00:00:00+00:00</updated><id>https://ahmednadar.com/every-face-in-a-civic-report-deserves-dignity</id><content type="html" xml:base="https://ahmednadar.com/every-face-in-a-civic-report-deserves-dignity/"><![CDATA[<p>Last week a report came in of a person sleeping rough on a Toronto sidewalk. The photo was clear. The face was visible. The report went to 311 and a ward councillor with that face completely exposed.</p>

<p>That’s not a bug. That’s a failure of care.</p>

<p>When someone reports a pothole, privacy isn’t the first thing you think about. But when the issue is a person, someone sleeping on a grate, someone sitting against a building with a sleeping bag, the photo is different. The person in it didn’t consent to being photographed. They didn’t ask to be in a civic report. They’re at the most vulnerable point in their life, and I was publishing their face to city officials.</p>

<p>I couldn’t ship another feature until this was fixed.</p>

<h2 id="the-two-problems">The two problems</h2>

<p><strong>Problem one: the AI didn’t know what it was looking at.</strong> SolveTO had 30 issue types. Potholes, graffiti, broken streetlights, illegal dumping. Nothing for homelessness. So when someone photographed a person sleeping rough, the AI classified it as “parks issue” or “debris.” That’s dehumanizing. A person isn’t debris. A sleeping bag in a doorway isn’t a parks maintenance problem.</p>

<p><strong>Problem two: face redaction was broken.</strong> I had a face detection system. It was supposed to find faces and redact them before the report was stored or emailed. It had been silently failing since launch. Every report with a visible face went out unredacted.</p>

<h2 id="what-homelessness-reports-look-like-now">What homelessness reports look like now</h2>

<p>The 31st issue type is “Homelessness / Encampment.” The AI now recognizes sleeping bags on sidewalks, cardboard bedding in doorways, tents on public land, people sleeping on grates. It distinguishes between someone’s sleeping spot and illegally dumped trash. That distinction matters.</p>

<p>When a report is classified as homelessness, three things happen that don’t happen for a pothole:</p>

<p><strong>A help banner appears.</strong> Before you see the photo, before the report details, there’s an amber bar: “Need help? Toronto Streets to Homes (S2H) (416-338-4766), 311 Shelter Referral, or call 211 for community services.” The report exists to connect someone with help, not to complain about them.</p>

<p><strong>Emails include a sensitivity note.</strong> When the report reaches the city, there’s a line at the top: “This report involves a person experiencing homelessness. Please handle with sensitivity and dignity.” It’s one sentence. It reframes the entire email from “here’s a problem to clean up” to “here’s a person who needs outreach.”</p>

<p><strong>Face redaction is mandatory.</strong> If face detection fails on a homelessness report, the report doesn’t send. It waits for review. A pothole report with a failed face scan still goes out, the stakes are lower. A homelessness report with a visible face stays in draft. No exceptions.</p>

<p>Face detection now works reliably across upright, tilted, sideways, and lying-down faces. The redaction is permanent and irreversible.</p>

<h2 id="why-this-matters">Why this matters</h2>

<p>The default in civic reporting is to treat everything the same. An issue is an issue. A form is a form. But a person sleeping on a sidewalk is not the same as a broken streetlight. The reporting interface, the classification, the language, and the privacy handling all need to reflect that.</p>

<p>Jason Fried talks about building software that respects people’s time. I’d add: respect their circumstances too. The person submitting the report has good intentions. The person in the photo has no say in the matter. The software has to protect both.</p>

<p>This is the kind of feature that won’t show up on a KPI dashboard. It won’t increase conversion. It won’t reduce churn. But it’s the right thing to build.</p>

<p>SolveTO now has 31 issue types covering every category in Toronto’s 311 service request catalogue, plus homelessness. Face redaction is automatic and permanent.</p>

<p>If you see someone who needs help in Toronto, you can report it at <a href="https://solveto.ca">solveto.ca</a>. The report reaches the right people. The face stays private. The banner shows the phone numbers that matter.</p>

<p>That’s the minimum. Not a feature. A baseline.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="solveto" /><category term="privacy" /><category term="civic-tech" /><summary type="html"><![CDATA[When someone reports a person sleeping rough on a sidewalk, they're asking for help, not publishing a mugshot. How SolveTO handles homelessness reports differently.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Why contractors lose $50K a year answering the phone too late</title><link href="https://ahmednadar.com/why-contractors-lose-50k-a-year-answering-the-phone-too-late/" rel="alternate" type="text/html" title="Why contractors lose $50K a year answering the phone too late" /><published>2026-03-01T00:00:00+00:00</published><updated>2026-03-01T00:00:00+00:00</updated><id>https://ahmednadar.com/why-contractors-lose-50k-a-year-answering-the-phone-too-late</id><content type="html" xml:base="https://ahmednadar.com/why-contractors-lose-50k-a-year-answering-the-phone-too-late/"><![CDATA[<p>It’s 2pm on a Tuesday. A homeowner in Mississauga just submitted a quote request for a kitchen renovation. They found the contractor’s website, liked the portfolio, filled out the form.</p>

<p>The contractor is on a roof three towns over. Phone is in the truck. He won’t see the notification until 5pm when he’s driving home. Or busy working and doesn’t check his phone until end of the day. By then the homeowner has submitted the same request to two other contractors. One of them replied in four minutes. They’re already booked for a Thursday walkthrough.</p>

<p>This happens every single day.</p>

<h2 id="the-numbers-are-brutal">The numbers are brutal</h2>

<p>Harvard Business Review and InsideSales.com studied 2.24 million leads across industries. What they found:</p>

<p>Responding within 5 minutes makes you <strong>21 times more likely</strong> to qualify a lead than waiting 30 minutes. Wait an hour and you’re already 60 times less likely to convert than if you’d responded in the first five minutes. Wait 24 hours and it’s basically over.</p>

<p>And the construction industry? The average response time is <strong>42 to 47 hours</strong>.</p>

<p>Let that sink in. Almost two full days to respond to someone who is ready to spend money right now.</p>

<p>Here’s the rest of the picture. <strong>78% of customers buy from whoever responds first.</strong> Not whoever has the best reviews. Not whoever has the lowest price. Whoever picks up the phone first. And <strong>85% of customers won’t even leave a voicemail.</strong> They just call the next contractor on the list.</p>

<p>For a remodeling contractor running a decent lead pipeline, slow follow-up costs over <strong>$50,000 a year</strong> in lost jobs. That’s not a guess. Work backward from average job values, lead volume, and conversion drops at each delay interval. The money is disappearing while the phone sits in the truck.</p>

<p>Only <strong>4.7% of companies</strong> across all industries respond to leads within 5 minutes. In contracting, that number is even lower.</p>

<h2 id="why-the-usual-fixes-dont-work">Why the usual fixes don’t work</h2>

<p>The typical advice is “set up an autoresponder” or “get a CRM.” Neither solves the real problem.</p>

<p>Autoresponders send something like “Thanks for reaching out! We’ll get back to you within 24 hours.” Boring. No values and no personality. The customer reads that and thinks “so you’re slow, got it” and keeps calling other contractors. A generic auto-reply doesn’t qualify the lead, doesn’t answer their question, and doesn’t make them feel like someone is actually paying attention.</p>

<p>CRMs are worse. They assume the contractor is going to sit down at a laptop, log into a dashboard, and manage a sales pipeline. Contractors are not at laptops. They’re on ladders. They’re under houses. They’re covered in drywall dust. The problem with speed-to-lead(STL) systems in contracting isn’t that people don’t know it matters. Everyone knows fast response wins jobs. The problem is <strong>access</strong>. The contractor physically cannot get to the tools that are supposed to help them.</p>

<h2 id="before-and-after">Before and after</h2>

<p><strong>Before STL Agent:</strong> A lead comes in at 2pm. The contractor doesn’t see it until 5pm. They make a mental note to call back tomorrow. Tomorrow they forget. The customer hired someone else two days ago. The contractor never even knew they lost the job.</p>

<p><strong>After STL Agent:</strong> A lead comes in at 2pm. AI emails the customer within seconds with an intelligent qualifying response. The contractor gets a Telegram ping moments later with the lead details and urgency level. They glance at the summary between tasks, see the customer needs a kitchen reno, and call them back on their next break. The customer, who was about to call another contractor, already has a thoughtful email in their inbox. The contractor books the walkthrough that evening.</p>

<p>The gap between those two scenarios is tens of thousands of dollars a year.</p>

<h2 id="whats-coming-next">What’s coming next</h2>

<p>The current system handles web leads through Telegram. That’s the foundation. What’s coming:</p>

<p><strong>AI phone calls.</strong> When a lead calls and the contractor can’t answer, AI picks up, has a natural conversation, qualifies the project, and books the appointment. The contractor gets a transcript and summary on Telegram.</p>

<p><strong>Outbound SMS.</strong> Automated text follow-ups to leads who haven’t responded, timed based on engagement patterns.</p>

<p><strong>Voice transcription.</strong> Every voicemail and call automatically transcribed, summarized, and delivered to Telegram.</p>

<p>The goal is simple. No lead should ever have to wait.</p>]]></content><author><name>Ahmed Nadar</name></author><category term="business" /><category term="contractors" /><category term="ai" /><category term="stl" /><summary type="html"><![CDATA[Contractors lose thousands every year because they can't respond fast enough. I built a system that fixes that.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://ahmednadar.com/assets/images/og-default.png" /><media:content medium="image" url="https://ahmednadar.com/assets/images/og-default.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>