Changelog
What's new on the map
Every change to the Edmonton Startup Map that you can see, newest first.
Recent changes
Added
- Build with the map. a Developers page lists every way to use the map on your own site (live map, your events, a badge, open data, feeds, an AI-assistant server), and there is now a free JSON API for organizations, jobs, events and funding, with no key.
- Funding and help for founders. a Resources page lists 18 grants, tax credits, loans, accelerators, spaces and free services for Edmonton founders, each read from the program's own page, with deadlines shown only when the program states one.
- A changelog and a State of Edmonton tech report. What's new shows every visible change, and the report writes the map's numbers as plain sentences: how many companies, what they build, where, who is hiring and who funds them.
- A friendlier way to get listed. a Get listed page with the three ways in (add, claim, add an event), the questions people ask first and what to do afterwards, and a "Your profile" checklist on the edit page showing what's still empty.
- Events you can act on. every event has an "Add to calendar" menu (Google, Outlook or an .ics file), there is a "What's on tonight" page, and organizers can put a live list of their events on their own site from the Share page.
- Funding and investors. a new Funding page lists the rounds, grants and strategic investments reported for companies on the map, newest first with their sources, who funded them, and the portfolios of the region's investors. Amounts nobody stated stay "not disclosed".
- A clearer way to claim a profile. unclaimed profiles ask "Is this your company?" with one button. The careers field on the edit form recognises a pasted job board (Greenhouse, Lever, Ashby, BambooHR, Breezy, Recruitee) and says its roles will appear on Hiring. Admins can email claim invitations from the Outreach page, 20 at a time, each with a one-click opt-out.
- The weekly email. sign up in the footer or at
/newsletterfor one email every Wednesday with the week's new companies, new roles and events. Your address is confirmed first, you can follow only the sectors you care about, and every email has an unsubscribe link. - More roles on Hiring. six more companies' own boards were found (Applied Pharmaceutical Innovation, Business Link, G2V Optics, LawDepot, My Engineering, Promise Robotics), taking the board to 97 open roles, 39 of them in the Edmonton region. Hybrid roles on Ashby boards now show as hybrid, and catch-all "Want to work with us?" postings are left out.
- Livelier Stats and Directory. charts sit in glass cards with a rainbow top edge, glowing gradient bars and coloured exit series, and the coverage meters are gradients. The directory's sectors, kinds of support and places are coloured tiles with a bar showing their size, neighbourhoods are pills, and the "more ways in" links are cards.
- A better Hiring board. each company's open roles sit in a coloured card with its logo, a role count and a link to its job board; roles show remote, hybrid and on-site tags, team, place and a green "New" badge for the last two weeks, in two columns on wide screens.
- More job boards. Hiring now reads BambooHR, Breezy HR and Recruitee boards as well as Greenhouse, Lever and Ashby, so more of the map's companies show their open roles.
- Every content page gets the better design. the aurora glow now sits behind every page headline (Hiring, Stats, Directory, This week, Data, Share and the rest), headline emphasis is a rainbow gradient, and "by the numbers" are glowing tiles. Hiring also has a band of the logos of every company with a careers page, and its careers pages are cards with logo, address and a Careers button. The timeline's bar matches the new navbar.
- A new logo and a navbar to match. the pixel-art green map pin replaces the old mark in the header, the favicon, the home-screen icon, share images and badges. The navbar is near-black glass with a green edge and a faint pixel grid, a green "Startup Map" wordmark, green active links and toggles, and green primary buttons. About also swaps the static map for a "Where it's happening" section: the eight busiest neighbourhoods and every municipality, linked to their pages.
- About is a landing page. a centred hero with the main calls to action, two bands of the logos on the map, the numbers, a map of every pinned office with links to the rest of the site, the biggest sectors, the next four events, then the method and privacy sections under "How it works", and a closing call to submit a company or an event.
- A livelier About page. the aurora backdrop and glowing number tiles, the ten biggest sectors as coloured bars, a five-step picture of how a public page becomes a pin, the three location precisions drawn, coloured verification badges, and a grid of where to go next. The words about method and privacy are unchanged.
- The wall is the events page.
/eventsnow opens on the colour wall (tickers, headline numbers, poster mosaic), then the filterable agenda, the year as squares, the six-month calendar, the charts, recurring series, and the calendar feed./events/wallredirects there. - 3D is the standard view. the map opens in 3D on desktop and phones;
?3d=0(the Flat map toggle) gives the flat map. Embeds stay flat unless they ask with3d=1, and their "Open the full map" link opens in 3D. - Hide the list, and a leaner phone sheet. the results panel has a labelled Hide button, and folded it leaves a "Show list" pill at the bottom left. On phones the sheet drops the stats strip, collapses the rarer filters like the desktop, and the peek has one list button with the count that opens the results (the tour is in the menu).
- A calmer map shell. the navbar drops the Directory link (it is in the menu) and the tour is an icon; 2D/3D hides when you leave the map view. The side panel drops the stats strip, shows Sector, Type, Place and Hiring now, and keeps Founded, Connections and the rarer filters behind one "More filters" button that opens by itself when one is in use.
- Colour everywhere. the map has a navy basemap with blue and amber roads, green parks, teal water and amber-lit buildings; the main buttons and the current nav item are gradients; panels and the navbar are tinted glass with a violet edge. Gradients blend in a perceptual colour space with a faint grain behind the page, so they no longer band.
- A colourful site. every page now sits on a soft glow in the event colours (blue, pink, green, amber, violet), the footer and page-top rules are a colour band, charts use the event palette, and selected text is pink.
- More colour on the events wall. a drifting aurora behind the page, two scrolling tickers of upcoming events, glowing stat tiles, and posters with neon edges, grain, a ghost date, saturated pictures, the time and venue, and a sheen on hover. Motion stops under reduced motion.
- Posters look the same with or without a picture. on
/eventsand/events/wallan event's image is now the card's background under the same kind, date and title, and the wall's mosaic fits about 60 posters in a tighter first screen. - The events wall. :
/events/wallshows the next year of tech events in colour: a poster mosaic, the year as squares coloured by kind of event, the next six months as day-by-day wall calendars, and charts of what, who, when and where Edmonton meets. Built for sharing. - The year of events as squares. :
/eventsopens on a grid of every day from this week to a year out, darker where more is on, like a contribution graph. Hover or tap a day to see what's on; weekly meetups count every week. - Every event in one place. :
/eventsnow shows tech, startup and business events as posters (or the agenda), with search and filters for when, where and kind. They come from Taproot Edmonton's community calendar, the Tech Wednesdays and Startup TNT Luma calendars, and organizers' own pages. Posters link to where their organizers published them; events without one get a drawn poster. Eventbrite and Meetup are still never scraped. - Lit buildings. : the buildings that hold the offices of the organizations on the map stand out, in 3D and as footprints in 2D. Hover one to see who's in it, click to open them. Offices only: approximate locations never light a building.
- A guided tour. : "Tour" in the menu (and the top bar, on wide screens) flies through the city's places in 3D with what the map counts at each.
?tour=<sector>does the same for one sector's busiest places. - An event screen. at
/live: the map flying through the city on a loop, with what's new, who's hiring, the next Tech Wednesdays and a QR code to the map. For a big screen; it keeps itself awake and up to date. - This week. at
/this-week: the next Tech Wednesdays, organizations new on the map, roles new on their job boards, and the next seven days' events. Rebuilt hourly. - RSS and JSON feeds. :
/feed.xmland/feed.jsoncarry new organizations and new roles, for feed readers and Slack. - Open data. at
/data: the map's facts as five downloads under CC BY 4.0, rebuilt hourly. - Organizations as CSV and GeoJSON, plus relationships, funding rounds and the source of every fact. - Addresses appear only for commercial offices; other records sit at their neighbourhood's or municipality's official centre. - A field dictionary and Dataset markup for search engines. - An MCP server. at
/mcp: AI assistants such as Claude can search the directory, read profiles and connections, and see events and open roles, each with its source. It's read-only, needs no key, and is rate limited. - Share images. for This week, Open data and the share page.
- Share this view. : a button beside the zoom controls makes a link whose preview on LinkedIn, Slack and the like shows that view, with its filters, its count, its organizations on a map and a program's arcs.
- An embeddable map. : partners can put a live, filtered map on their own pages, such as a sector or a program's portfolio. Their page still scrolls past it.
- Badges. : "On the Edmonton Startup Map" for organizations' own sites, with "Hiring N" while their job board has roles.
- "Put the map on your site". at
/share: build an embed with a live preview, pick a badge, and copy the snippets. - Connections. : pick Startup TNT, Edmonton Unlimited, Amii, the University of Alberta's spinouts or another program, fund or network to see everyone it's linked to. - Arcs run from its pin to theirs. Hover one for how they're linked and the public source, or click it for the list. - Links like
/?via=startup-tntshare a program's whole network. - The new "Connections" filter, and "See them on the map" on a program's or fund's profile, lead to the same view. - 78 more organizations from the owner's StartAlberta list. , now live: loaded into the cloud database on 2026-10-07, so the directory has 845 organizations. The list was used for names only; each company joined through a page of its own site, an official page or the City's business-licence register. - Their logos (48 have one) show as initials until the next data load with the service key uploads them. - They include CarePros, Onlea, Yellow Pencil, gskinner and Poppy Barley, which earlier sweeps had left out as service businesses. The owner asked for the whole list, so service businesses now join, each with a review note. - 38 are pinned at a published or licensed address, 3 at neighbourhood level and 37 at city level. 16 rest on the City's register alone, flagged as unsure. - 182 leads couldn't be settled: about 90 have no readable site or complete name, 27 are on sites whose terms bar automated use, and the rest have no page that places them in the region.
review/startalberta-leads.mdlists each one. Full names and websites would settle many of them. - A first flight over downtown. : a first visit tilts into 3D and flies in to the downtown skyline. It plays once, and never for shared links or with reduced motion on.
- Sector chips on the map. : one tap for Health, Energy, AI/ML, Hardware and the other big sectors, each with its count.
- "Hiring" and "New" tags on logos. : companies with open roles, and records added to the map in the last 30 days.
- A map of logos. : - At the default zoom the map shows about twice as many logos. - A logo that stands for neighbours too close to show carries "+N": hover it to see their logos, click it to zoom in. - Several companies at one address open as a list. - The same company stays the face of a crowded spot at every zoom, so logos no longer come and go as you zoom.
- 18 more organizations from the owner's list of missing companies. . Each was checked against its own site or another public page; nothing was copied from the list. - They include Cranesmart (now part of NOV), Eleven Engineering, Effortless Admin, Master Flo Valve, RAMP InterActive, Sirius Controls, Tricca Technologies and Wonder Interactive. - 9 are pinned at a published office or licensed address, and 9 carry a review flag. - The other 48 rows were already listed or excluded (3), or stay out with a reason: service businesses, manufacturing without a technology angle, unreadable sites, or no public page saying where they are. DATA_SOURCES.md lists each.
- Addresses for 74 organizations. . The owner asked for the real address of every record that only named its city, and 520 of 785 did. The crawl now follows each site's sitemap and its contact, about, privacy and terms pages, reads script-drawn pages, and four waves of research agents (548 organizations in all) looked at the rest. 74 records gained a place: - 36 exact pins in Edmonton, and 13 at a building they share with a hub; - 11 University of Alberta building addresses, shown as approximate pins at the campus, since the City's address data doesn't list those buildings; - 4 neighbourhood-level pins, for addresses that look like homes; - 10 outside Edmonton, in Sherwood Park, Ardrossan and Acheson, placed with the counties' open data (below).
- Strathcona County and Parkland County open data. : civic addresses, land-use districts and, for Strathcona, a list of assessed dwellings, under their open government licences. As in Edmonton, a home or a farm never becomes a pin. The two statements are on
/aboutand inDATA_LICENSE.md. - `ignoreAddress`. , a new override for a site whose addresses aren't where the organization is (a user group that meets at different venues, an event site, a mailing address care of another company).
- Built to be found. : - **Open to search engines** since 2026-10-06: the production site can be indexed. Previews never are. - **A directory** at
/directory: every sector, kind of support, municipality and Edmonton neighbourhood, with counts. - **Pages for each kind of support organization:** accelerators and incubators, investors, coworking spaces and hubs, universities and research, programs, and community groups. - **Share images, with live numbers,** for Hiring, Events, Stats, Timeline and the new pages. - **Event markup,** so upcoming events can appear in search engines' event listings. - **/llms.txt,** a guide to the site for AI assistants, and a web app manifest. - **IndexNow:** once the site is open to search engines, Bing and the engines that share its index hear about changed pages daily. - Map controls. : zoom in and zoom out, a compass that appears when the map is turned, and "Show all results", which frames whatever the filters leave. Pinching and scrolling still work, but nothing on screen could zoom the map before. The timeline has them too.
- Active filters as pills. : every picked sector, place, stage and the like shows under the filter chips and comes off with one click. A chip that said "Sector · 3" never said which three.
- A results panel that folds away. : a tab on its edge gives the map the whole screen, and
/brings the panel back with the search ready to type. - Sign-in and notification emails that arrive. : - The site sends its own sign-in links through Resend, from the owner's domain. Supabase's built-in mailer, which only reaches the project's own team, is no longer needed. - An address on the admin list gets its account the first time it asks for a link. - Requests are rate-limited per address and per IP.
- Smooth scrolling on the content pages. : eased wheel scrolling, smooth jumps to sections, and blocks that settle into place as they scroll in. A reduced-motion setting turns it all off.
- 59 more organizations. : names our sources mentioned without saying where they're based, now placed by public sources, and a second sweep of software, health, hardware, games and the region's towns. 17 are pinned at an office or campus building, and 40 carry a review flag for a moderator.
- The map's address:. [map.techwednesdays.ca](https://map.techwednesdays.ca). Links, share images and sign-in links use it. Search engines are still asked to stay out until launch day.
- 74 more companies,. from federal R&D grant records: NRC IRAP recipients in the region, each confirmed on its own website. 38 are pinned at a published office or licensed address. 50 carry a review flag for a moderator.
- Accessibility. : - Skip links on every page. On the map, the first Tab offers to skip straight to the search and the list. - An automated WCAG 2.1 AA check of 14 pages, on desktop and on a phone, in the test suite.
- A performance readout for testing on phones:. add
?perf=1to the map's address to see how long the map took and how smoothly it moves. - A share card for the map. (the home page's social image, and the one for launch posts): every organization with a public office as a dot over Edmonton's neighbourhoods and river valley, with the live counts: "Edmonton's tech ecosystem, mapped".
- A real 404 page. ("This spot isn't on the map"), with the way back to the map, search, and a link to add a missing company. Missing profiles get it inside the site's header and footer. Unexpected errors get a page with a retry button instead of a blank screen.
- Tech Wednesdays' own calendar. :
pnpm data eventsreads the calendar's iCal subscription feed. Regular sessions confirm the weekly series, and special editions are listed with their own pages. Event pages on the platform are linked, never fetched.
Changed
- Organizations without a street address are listed, not mapped. . The municipality pills ("429 in Edmonton") are gone. The results header says how many results are on the map, and "Search as I move the map" lists only what the map shows.
- Where mail goes is no longer an office. . An address given as "c/o", "registered at", a legal address or "by mail at" no longer places an organization, and neither does a suite in a building whose only licensed business is a UPS Store or a postal outlet, which the City's business licences show. - Four pins were withdrawn: Chenomx, Digital Alberta, DryRun and Enterra Energy Resources. Their records stay at Edmonton. - Three moved to the place their own site or licence gives: Wyvern, Agent Second Brain and Agereh.
- Wrong municipalities fixed. : a street named for a town ("Stony Plain Road") had placed Dune Engineering and PFM Scheduling in Stony Plain. They are in Edmonton now, with InnoTech Alberta (Devon), the Edmonton Linux Users Group (Strathcona County) and Energera (Acheson, not Spruce Grove).
- Suite numbers that were phone numbers are gone. : "#2505" on Campbell Scientific's pin was the end of its toll-free number.
- Organizations at a hub's address show as its members. : 26 pins changed from a street point to the hub's building once the hub (Applied Pharmaceutical Innovation, the NRC, Concordia and others) had an address.
- The crawler honours `Crawl-delay`. in robots.txt. A site that asks for a long pause gets its own links and a few guessed pages, not its sitemap.
- Review notes where a site says it is based elsewhere. : Montréal, Calgary, Houston, Florida, Regina, New York, Toronto, Prince Edward Island, New Jersey, California and Vancouver, and where a pin rests on a licence or a related page. ENTS' note is for a move it has announced.
- City-level records: 520 to 450. (512 to 442 in the database). Exact pins went from 239 to 255, building pins from 16 to 55 and neighbourhood-level pins from 10 to 25. The rest have no public address to find, or a site we can't read, or a place with no open data we may use ( has the table).
- Three more sites are never read. : LawDepot's terms bar using its material in an automated system, and the SKAA store's and Hope Innovations' carry Shopify's clause against spidering, crawling and scraping. Nothing from them is in the data.
- Quote checks are fairer. : a short contact page that mentions a captcha is no longer taken for a bot check, and a page that script draws is read in the browser when no quote cited on it matched.
- Rural grid roads keep their number. ("53158 Range Road 224"), the form the counties' address data uses, and **a home's neighbourhood** is found from where its point lies when the property record's name for it ("Chappelle Area") isn't a neighbourhood's name.
- Search engines can follow everything. : - Each row in the map's list links to its profile. A click still opens it on the map; Cmd-click opens the profile. - Long sector and area pages end with an A–Z list of everyone past the first 60. - A support organization's breadcrumb goes through its type's page. - The home page has a heading, a canonical address and a description with the live counts. - Hiring and Events have titles in the words people search with. - The production vercel.app address redirects to map.techwednesdays.ca.
- A map you can read. : the basemap sat so close to black that minor roads and buildings could hardly be told from the ground, and street names were dim. - Roads, buildings, water and labels each sit on a measured step brighter, in the same cool greys. - Main roads are named from a wider view, every street from closer in, and parks and lakes are named too. "Jasper Avenue NW" and "Whitemud Drive" are on the map now. - Pins are a tenth larger, and the names on logo-less pins are set in bigger type.
- Panels that fit the screen. : - Below 1400px wide, a company opens in the results panel's place with a "Results" button back, instead of both panels leaving a sliver of map. Wider screens keep them side by side. - Below 1024px the layer toggles move into the results panel, and the top bar gives up its labels before it runs out of room.
- Comfort on phones and tablets. : - Filter chips, option rows, toggles and buttons are bigger on touch screens, and the filter chips scroll sideways in one row instead of taking three. - Text fields are 16px on touch screens, so iPhones no longer zoom the page when you tap one. - Tapping a button twice no longer zooms the page. - The login field no longer opens the keyboard before you've read the page.
- Easier to read. : small type is a pixel larger across the map's panels, the profile pages, charts and forms, results are roomier, and the editorial labels are 12px. Filter lists are opaque, so the page no longer shows through them. - Notes beside related organizations ("Amii case study: machine learning for oil and gas operations") get two lines before they're cut. - Event venues wrap on a phone instead of being cut, and the careers list is two columns until very wide screens, so company names stay whole beside the "Careers" link.
- The header lines up with the page. : on the content pages the bar now sits on the same grid as the headline and the rules below it.
- Forms point at what to fix. : after a failed send, focus moves to the first field with a problem. The "Add an organization" steps are clickable once finished.
- Editorial content pages. : About, Stats, Hiring, Events, sector and area pages, profiles, forms and the 404 page read like a printed guide. - Large serif headlines, numbered sections with their labels in the margin, and big serif figures. - Ruled lists instead of boxed cards. The events agenda leads each day with its date in large type. - A colophon footer with the site's name set large.
- Startup TNT. has its own logo and its office at 10177 104 Street NW. - Very wide wordmarks are now accepted when a site has nothing else. - Logos in a partner carousel are never taken for the organization's own.
- Address sources say whose page they are:. "published by the organization" only when it's on its own site.
- Sign-in emails are black and white,. and an expired link offers a new one instead of leading to a missing page.
- A logo, and a black-and-white brand. : - The mark is a map pin with the North Saskatchewan River cut through its head, white on a black tile. It's in the header, the browser tab, phone home screens and share images. - Everything that was teal is white now: buttons, links, focus rings, the selection on the map. - The map has no colour left. Companies are edged white and support organizations grey, events are light grey squares, and the river valley is a quiet grey. - Charts and the timeline are black and white. Exits on the timeline are rings, white for acquired and grey for closed. - Only errors keep a colour, red.
- 31 more sites are never read:. their terms forbid crawling or reuse of their content. None of them is on the map.
- Airport addresses land in Leduc County:. "Edmonton International Airport" in an address no longer reads as an Edmonton street, which had put one organization on an unrelated building.
- Fewer false duplicate flags:. a shared place name alone, like "Alberta" or "Canadian", no longer marks two organizations as possible duplicates.
- Logos are whole tiles. : rounded tiles with the entire logo, never cropped, on the map, in lists and on profiles. - Wordmarks get a wider tile, so they stay legible. - Organizations without a logo show their name in type instead of initials. - A group of nearby organizations shows its most prominent logo with a count, instead of a number bubble. - Ten images that weren't the organization's logo are gone: platform default icons, press and partner badges, photos and buttons.
- Copy, read through once more:. - The events page and the calendar feed say where events come from now: organizers' own pages and calendars. - The About page explains how homes are kept off the map (zoning or, failing that, the property assessment), and that claims from other addresses are checked by a person. - The map's detail panel says "Claim this profile", like every page that points to it. - The "nothing matches" state links to the submission form instead of promising it soon. - The outreach invitation no longer suggests that claiming is how to hide a logo: removal requests do that, for anyone. - When the map can't load, the message says whether the browser lacks WebGL 2 or the download failed. - Edmonton Tech Wednesdays is linked from the footer and the About page.
- Nine organizations' own sites are no longer read:. their terms forbid crawling or reuse of their content. Their site text and logos come off the map, and they stay listed through their other sources. Their profiles stop citing those sites as sources too, including a quote one of them used to show.
- Exits:. Drivewyze is tagged acquired by Fleetworthy, and Certified Tracking Solutions (Titan GPS) joins as acquired by GPS Insight.
- 20 more pins:. companies that only named their city are placed at their licensed premises, from the City of Edmonton's business licence register, when their sources already put them in Edmonton. Home-based licences are never used, and every address passes the same checks that keep homes off the map.
- On Vercel, the site's address sets itself:. without
NEXT_PUBLIC_SITE_URL, canonical links, share images and sign-in links use the project's production domain, and switch to the custom domain once one is added. - Map labels give way to pins:. a street or city name is no longer drawn half under a pin or cluster (the downtown cluster used to cover "Edmonton").
- Reduced motion:. with the system setting on, the detail panel fades in place instead of sliding in. The collapsed mobile sheet's list no longer takes keyboard focus.
- Faster first visits. : - About 134 kB less to download before the map appears: MapLibre's shared code is fetched once instead of twice. - 70 kB less on every page: a font only one admin screen used is gone. - The ⌘K palette loads when the page is idle. - The map page's data is a quarter smaller.
- The cloud database. has the full schema (the ten Phase 3 to 5 migrations, plus indexes for two foreign keys) and the dataset: 634 organizations, 46 events and 371 logos. Later loads go through the load workflow.
- Exits that live on as a local subsidiary. stay one record named for both, as the owner confirmed. Their review notes are cleared.
Fixed
- The 3D switch could do nothing. when the map was updating its data at that moment.
- A Pak Mail suite is a mailbox. : the licence-register check for mailbox stores now knows "Pak Mail" and plural "Centres", so a suite at one is no longer pinned as an office.
- A contact page that mentions reCAPTCHA is a page. : the quote checker no longer takes a short page carrying the reCAPTCHA notice for a bot check.
- No phone numbers in one-liners. : a heading that ends "text us at (780) …" is a call to action, not a description.
- No text glued onto a contact address. : when a page runs an address into the next word ("support@complyplus.caSpeak"), the address now ends where the capital begins instead of keeping a made-up ending.
- Spam on a lapsed domain. no longer becomes a company's description: Vietnamese gambling spam is now recognized too. GENFIVE's domain serves it, so GENFIVE keeps its earlier description and is flagged for review.
- Phone numbers read as suite numbers:. four addresses lose a unit that was really the end of a phone number, and InnoTech Alberta is pinned at its Edmonton office.
- Tidier one-liners:. no doubled full stops, no heading that repeats the company's name, and no press statements, photo credits or download prompts.
- Headlines are read once:. screen readers and search engines no longer get every page's title twice.
- "Updated" means updated:. a data load that leaves a record unchanged no longer marks it as edited.
- The top bar ran off the screen. below about 1280px wide: at 1180px "Jump to" wrapped onto four lines and "Submit a company" was cut off, and on an iPad held upright the menu and Submit were out of reach.
- The phone's summary row. squeezed "767 organizations" down to "7…" beside the layer toggles. The count now appears only when filtering has narrowed the list.
- The footer's big wordmark was cut off on phones. ("Edmonton Startup Ma"), because its type had a floor wider than the screen.
- Admin outreach:. marking the last organization on the list as invited showed no confirmation, because the list emptied and took the message with it. It stays on screen now.
- Old location citations:. a profile whose pin moved, like an area pin that later found its office, no longer lists sources for where it used to be.
- Share images on Vercel:. every social share image failed to render there, because the fonts were read through a path the deployment leaves out. The fonts now ship with the app (
assets/fonts/geist/, with their licence).
Earlier releases
0.6.0 Phase 5: more data, the monthly refresh, dead-site detection and outreachOctober 3, 2026
Added
- More coverage:. 634 organizations (528 companies), up from 569. - Four research passes, with every quote checked on its page: the region outside Edmonton (companies there went from 25 to 61), thin sectors, acquisitions (31 on record, up from 14), and new sources for three records. - Exits that live on as a local subsidiary are one record each, named for both, such as "Micralyne (now Teledyne MEMS)".
- Monthly refresh. ( to): -
pnpm data refreshre-runs the pipeline with fresh fetches, checks that the pages behind upcoming events still mention them, and writesreview/changes.md. - A scheduled workflow (.github/workflows/refresh.yml) opens a pull request with that report every month. Loading into Supabase stays a separate, manual workflow (load.yml) behind aproductionenvironment. - Dead-site detection:. every run checks each website. Two failed checks a week apart (a parked domain at once) flag the record with a suggestion to mark it closed if a public source confirms it. Nothing is marked closed automatically.
- Review reasons in the admin console:. the Needs review queue shows why each record was flagged, most important first, and the record page lists every reason. Clearing a record records the reasons reviewed; only a new reason raises the flag again.
- Outreach. at
/admin/outreach: - Unclaimed organizations with a public contact email from their own website, by state (not contacted, invited, do not contact). - A filled-in invitation to copy for each, bulk logging, and a CSV export. - The app sends nothing, and the addresses are admin-only and never committed. - Founding years. from what organizations say about themselves on their own sites, each citing its sentence: 14 so far.
- Database:.
organization_reviews,organization_contactsandoutreach_log, all admin-only. pgTAP: 94 tests. - Tests:. 176 unit tests (site checks, reconciling, bot checks and takeovers, the assessment rule, one-liner choice, contacts, founding statements, the change report) and 47 Playwright tests (new: review reasons, and outreach with its CSV export).
Changed
- Quote checks persist. in
data/quote-checks.json: a quote confirmed once stays confirmed, so a page that changes later never withdraws evidence, and re-runs fetch only new quotes. - Re-runs no longer churn the dataset.. A site that fails once keeps what it said last time, and unchanged facts keep their retrieval dates. When a site was checked moved to
data/site-checks.json. - Sector classification ignores a site that didn't answer with its own page (a parked domain's marketplace, for example).
- The admin pending badge counts submitted events too.
- What the first full refresh fixed. : - A bot check, or a search page served for the homepage, no longer reads as the site's page: the record keeps what the site said last time, and it never counts toward "down". One run met 15 of them. - A lapsed domain now selling loans, casinos or pills counts as parked, and the record is flagged. - The organization's own description isn't replaced by a third party's, and a founding year or logo doesn't vanish because one fetch missed it. - Careers pages come only from the organization's own site or job board. - A refresh fetches each page once. - A changed website starts its check history over, and nothing the old site said carries over.
- Better one-liners:. a site's bare name ("Crimson Herring Studios") is never used as a description, and a title-case tagline gives way to a sentence from the site or a verified third-party description.
- Never pinning a home, with less guesswork:. when the City has no zoning on record for an address, its property assessment decides. Until now, a unit number was taken to mean an office.
- 28 more hosts on the never-fetch list. , whose terms the Phase 5 research passes found barring crawlers or limiting use to personal, non-commercial purposes. Evidence from a never-fetch site no longer counts for organizations, as it already didn't for events.
0.5.0 Phase 4: hiring, stats, timeline, events and ⌘KOctober 3, 2026
Added
- Hiring board. at
/hiring: - Open roles from companies' public Greenhouse, Lever and Ashby job boards, grouped by company, with place, team and search filters kept in the URL. - Below the roles: companies marked as hiring, and every careers page on the map. - Boards are found on companies' own careers pages (pnpm data ats) and read daily by a Vercel Cron job (/api/cron/jobs,CRON_SECRET) or on demand (pnpm data jobs). General-application postings are left out. - Profiles show the hiring status and up to six open roles. - Owners, the community and moderators can set the hiring status. A careers page address that is a job board attaches the board. - Stats dashboard. at
/stats: - Headline numbers; companies by sector and by municipality; founding years; acquisitions and closures by year, with the list of exits; support organizations by type; top hubs. - How complete each fact is. - Server-rendered charts with hover and keyboard readouts, a table under each, and the coverage stated on every chart. - Timeline. at
/timeline: the map from the earliest public founding year to today, with play and pause, a year slider with a foundings histogram, and each year's foundings, acquisitions and closures. Only public dates move anything. - Events. : -
/eventsshows the next two months by day, recurring meetups with their next session, events further ahead, and a venue map. - A calendar feed at/events.ics: subscribe, add to Google Calendar, copy or download. - An Events layer on the explore map (?events=1) with a card per venue. - Event submissions at/events/submit, moderated in a new Events queue where moderators can add a calendar rule. - 46 events from two research passes, each with quoted evidence from organizers' own pages (pnpm data events). 33 are on the map; a third pass found public addresses for six venues the event pages name without one (data/raw/venues.json). - ⌘K command palette. : jump to any organization, sector, place or page from anywhere. On the map, organizations open in place.
- Site menu. with the new sections, in the site header and the map's top bar, and search buttons for the palette.
- Database:.
job_postingswith public read for published organizations; job board columns and a hiring check time on organizations; event schedules (start, end, all-day, category, online, organizer name and link);event_features; exit years onmap_features. pgTAP: 81 tests. - Tests:. 123 unit tests (job board parsing, hiring filters, stats, timeline phases, recurrence across daylight saving, the iCal writer, event schedules, palette ranking) and 45 Playwright tests (new: hiring, stats, timeline, events and the feed, the Events layer, ⌘K, and event moderation).
Changed
- nat.ltd is on the never-fetch list. (its terms limit content to personal, non-commercial use, as BioAlberta's do). The NAT profile drops its site's logo and wording, and natHacks is left out of events. The Edmonton Public Library's site and BiblioCommons, whose terms bar automated harvesting, joined it too.
- Whyte Avenue addresses. are looked up as 82 Avenue, as the City's parcel data lists them. Interactive Arts Alberta now has an exact pin.
- Funding rounds. show the source's wording ("About $6.1 million") when no CAD figure is known, instead of "Amount not disclosed" next to an amount.
- Website sources. for sites the pipeline never fetched now say so, and keep the research date instead of the build time.
- Curation:. - Intuit's record is now Intuit Canada. - Mc and Mac neighbourhood names follow the City's spelling (McCauley, MacEwan), with the same URLs. - A renamed record without a website no longer duplicates on load.
- Phones:. grids no longer let long names widen the page, and the header keeps the wordmark to two lines.
- Slider thumbs carry accessible names (the explore founded-year range too).
Fixed
- Dates showed the server's day (UTC), so a job board sync at 11:47 pm Edmonton time read as the next day. Dates now follow Edmonton time everywhere.
- The ⌘K list kept its old scroll position as you typed, hiding the top result. An exact match now leads ("edmonton" opens on the place, not on a group named after it).
- The
/eventsfilter chips counted sessions while the header counted events; both count events now.
0.4.0 Phase 3: profiles, community flows and moderationOctober 3, 2026
Added
- Profiles. at
/c/[slug](companies) and/orgs/[slug](support organizations): server-rendered and cached on first visit. - Everything the explore panel shows, plus breadcrumbs, a static map and long lists folded behind "Show all". - Descriptive titles ("Acme AI: Edmonton AI/ML startup"), canonical URLs, and Organization and BreadcrumbList JSON-LD. - Share images with the logo, name and one-liner on the brand background. - Static maps. drawn from the City of Edmonton's neighbourhood boundaries: an office pin, a dashed neighbourhood for approximate locations, or the municipality.
- Collection pages. at
/sector/[slug]and/area/[slug]for municipalities and Edmonton neighbourhoods. Each has headline numbers, an office map, the organizations, and links to related sectors or areas. - Crawlers:.
sitemap.xml(about 650 URLs) and arobots.txtthat stays closed until indexing is switched on. Shared/?c=links now point to the profile as canonical. - Submit. (
/submit) in three steps, starting from the website. The form prefills from the site's own metadata through a fetch that refuses internal addresses and honours robots.txt. - Suggest an edit. (
/edit/[slug]): field-level suggestions stored as diffs, each with a public source. - Claim. (
/claim/[slug]): an address on the organization's domain verifies itself through a one-time email link; others go to a moderator. Owners manage their profiles from/account. - Removal. (
/removal/[slug]) for the logo, the location or the whole listing. A logo disappears the moment it's requested, from cached pages too. - Spam defences. on every public form: a honeypot field, and rate limits counted by a salted hash of the IP address.
- Sign-in. at
/loginfor admins and owners. It answers the same way whether or not an address has an account. - Admin console. at
/admin: - Queues for new organizations, edits, claims, removals and records the pipeline flagged, with bulk actions. - Review pages with a side-by-side diff and per-field apply. - A record editor that shows and releases field locks, edits locations safely, and requires a source for factual changes. - An audit log viewer and the auto-publish setting for owners' edits. - Admin email notifications. through Resend, once
RESEND_API_KEYandEMAIL_FROMare set; logged until then. - Site shell:. header, footer note on every page, the
/aboutmethodology page, and a "link expired" page for auth. - Database:.
neighbourhood_shapesandneighbourhood_centroidsviews (security invoker), with pgTAP coverage (74 tests). - Tests:. - 75 unit tests: titles and JSON-LD, collections, the prefill extractor, the URL guard and edit diffs. - 33 Playwright tests. New ones cover profiles, redirects, share images, collections, the sitemap, the submit flow through admin approval, a domain-verified claim through Mailpit, and logo removal.
Changed
- The explore panel's Suggest an edit, Claim and Request removal buttons and the top bar's Submit button now work. The panel links to each organization's full profile.
sharpandrobots-parserare runtime dependencies (share images and the prefill).pnpm db:adminsinvites now land on/adminthrough the new/auth/confirmroute.
Fixed
- Neighbourhood names with accented letters were capitalized mid-word ("WîHkwêNtôWin"); they now read "Wîhkwêntôwin".
- Compact money printed a trailing ".0" ("$140.0K").
- Sources derived during the build (sector, logo) now carry the time their page was fetched, not the build time.
0.3.0 Phase 2: exploreOctober 3, 2026
Added
- Explore screen. at
/, server-rendered from a cached directory read and filtered in the browser: - Search, filters with live counts (sector, type, place with municipality and neighbourhood, founded range, hiring, plus status, verification, stage and team size under More), "Search as I move the map", and a stats strip for companies with a funding caveat. - Map, list (table) and grid views, all keyboard navigable, with empty states that say what to try. - URL state for every filter, the view, the selection, the open group and the camera: links reproduce the view, and Back closes what you opened. - Shortcuts:/,M,L,G,3,Esc, and arrow keys in the results. - Map layers. drawn as runtime images, never DOM markers: - Logo pins with a monogram fallback. - Clusters showing member logos and a companies/support ring. - Hub stacks with a count. - One dashed pill per municipality for records without a public address, opening the list. - A hover card, fly-to on select, and floating 3D pins with leader lines.
- Company panel:. every field with its source and retrieval date, publicly reported funding with links, related organizations (programs, investors, members, spinouts), hub members, similar organizations, and copy-link. Suggest an edit, claim and removal are placeholders for Phase 3.
- Mobile bottom sheet. (peek, half, full) on Motion: the search pill at peek, and a tapped pin opens the company at half height.
GET /api/orgs/[slug]: published organization details, CDN-cached.- Database:.
map_features.funding_reported_cadand amunicipality_centroidsview (security invoker), with pgTAP coverage (70 tests). - Tests:. - 52 unit tests. - 18 Playwright smoke tests on desktop and mobile: the map, search, filters and URL state, opening and closing a company, the views, groups, 2D/3D and the mobile sheet. - CI now starts Supabase and loads the dataset before the e2e run.
- Data:. a follow-up research pass added 75 organizations, for 575 in all (469 companies, 106 support organizations), plus a new open-data source, the federal grants search.
Changed
- Glass panels now blur as designed. Lightning CSS had been dropping the unprefixed
backdrop-filtersince Phase 0. - The 2D/3D switch toggles building-layer visibility instead of swapping the style, so data layers survive it.
- Pipeline: rejects template filler, photo credits, datelines, stat counters and grant project text as summaries, and no longer ends sentences at abbreviations. Six more sites are never fetched, and the overrides gained 10 exclusions and 3 merges.
Removed
- The Phase 0 status card.
0.2.0 Phase 1: dataOctober 3, 2026
Added
- Data pipeline. (
pnpm data,scripts/data): verify, merge, enrich, geocode, logos, build, validate, review and load steps, with 39 unit tests (pnpm test:unit). - Polite crawler: robots.txt, one request per second per host, a 14-day cache, retries for transient errors, and a do-not-fetch list for sites whose terms forbid it. - Quote verification against every cited page before any text is reused. - Geocoding from City of Edmonton open data (parcels, zoning, neighbourhoods) and the Canadian Geographical Names Database. Residential addresses become neighbourhood pins and are never stored. - Circular logo badges (64 and 128 px) and card logos, with a square brand mark for wide wordmarks and a light tile for dark logos. -pnpm validate:datagates every load and runs in CI. - First dataset. (
data/organizations.json): 500 organizations from 54 public sources. That's 415 companies (279 complete) and 85 support organizations (67 complete), each with field-level sources. Loaded into the local Supabase stack only. - Review queue. (
review/needs_review.csv, lowest confidence first) and coverage summary (review/coverage.md). data/raw/: 69 discovery files with each source's robots.txt and terms verdict; 15 sources excluded by their terms.- Licences: MIT for the code, CC BY 4.0 for the dataset (
DATA_LICENSE.md).
Changed
- Applied the checkpoint 1 answers.
- Applied the checkpoint 0 picks: Aurora teal accent and the Obsidian map style. The other accent candidates, the Nightfall style with its terrain, and the
/designpreview routes were removed.
0.1.0 Phase 0: foundationsOctober 2, 2026
Added
- App:. - Next.js 16 scaffold with Tailwind CSS 4, shadcn/ui on Radix (
radix-nova), lucide, Motion and the Geist fonts. - Dark-only design tokens with glass surfaces and three accent candidates, with contrast computed rather than eyeballed. - Map:. - MapLibre GL 6 map on OpenFreeMap tiles, with two custom dark styles: Obsidian, and Nightfall with hillshade and terrain. - The North Saskatchewan River valley is drawn in the accent colour. - 2D/3D toggle with extruded buildings, also on the
3key. - Preview routes:. - Explore shell at
/, showing the real map and an honest status card. -/designand/design/map, the checkpoint previews (never shipped to production). - Database (Supabase):. - Organizations, locations, sources, events, relationships, submissions, claims, takedown requests, owners, admins, settings and audit log. - PostGIS, full-text and trigram search, and RLS on every table. - Database-enforced field locks, logo masking, location privacy, claim domain matching and an audit trail. - Logos storage bucket.
- Auth:. public sign-ups disabled; admins are invited through
pnpm db:admins. - Tests and CI:. - 67 pgTAP tests (schema, RLS by role, triggers). - 12 Playwright smoke tests (desktop and mobile). - CI runs lint, typecheck, format, build, e2e, database tests, advisors and a types drift check.
- Docs:. README, DECISIONS, DATA_SOURCES, CHANGELOG, PROMPT (the brief), and the Phase 0 checkpoint report with screenshots.