From 1ff2427e90c29eb8ee41fa467377d6dc14b2ae7c Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 5 Aug 2026 00:20:04 +0000 Subject: [PATCH 1/5] chore(main): release suburblens 1.1.0 --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 192 ++++++++++++++++++++++++++ 2 files changed, 193 insertions(+), 1 deletion(-) create mode 100644 CHANGELOG.md diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 37fcefa..5fdd883 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.0.0" + ".": "1.1.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..a975f9e --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,192 @@ +# Changelog + +## [1.1.0](https://github.com/fatblaine/suburblens/compare/suburblens-v1.0.0...suburblens-v1.1.0) (2026-08-05) + + +### Features + +* Add an "Export PDF" button to the suburb comparison page ([4932a97](https://github.com/fatblaine/suburblens/commit/4932a972125cf1346a8814c1bc60eef701f8e992)) +* Add city heatmap (MapLibre choropleth) for Sydney & Melbourne ([262c1d9](https://github.com/fatblaine/suburblens/commit/262c1d94d6bb3e8f5665b1e0b14cdba0c3df84e6)) +* Add city heatmap (MapLibre choropleth) for Sydney & Melbourne ([bb16a39](https://github.com/fatblaine/suburblens/commit/bb16a39b4dd7072f531d85e95937e418403eb635)) +* Add Language at Home feature; Add Country of Birth feature; Apply glassmorphism UI design system ([#17](https://github.com/fatblaine/suburblens/issues/17)) ([a618286](https://github.com/fatblaine/suburblens/commit/a61828689c6bbc034341b626b566f08251a60ee0)) +* add multi-suburb comparison with batch API endpoints ([#8](https://github.com/fatblaine/suburblens/issues/8)) ([2c7b217](https://github.com/fatblaine/suburblens/commit/2c7b21761d25ba36d3aa562144c9140fda05d949)) +* Add per-user daily AI question limit ([bca8c5d](https://github.com/fatblaine/suburblens/commit/bca8c5d6ba48701ee2506a0b50717e5888afca64)) +* Add per-user daily AI question limit ([7b84c46](https://github.com/fatblaine/suburblens/commit/7b84c46f4dcbf2aea8a698c9ba31702cb59ca17b)) +* add sitemap.xml and robot.txt ([876c7ad](https://github.com/fatblaine/suburblens/commit/876c7ad8197f85049804688090a6aa091dc2a6f9)) +* **agent:** add security event logging to the prompt-injection guard ([0322b14](https://github.com/fatblaine/suburblens/commit/0322b14caae6d4173a9ef5a6c66c9592d16656c0)) +* **agent:** add security event logging to the prompt-injection guard ([f04c9ee](https://github.com/fatblaine/suburblens/commit/f04c9ee97c77013419586ebc2b4a86025281e82c)) +* **agent:** add security event logging to the prompt-injection guard ([527042e](https://github.com/fatblaine/suburblens/commit/527042e142879c0358ac3ef87fbef5617e2e2fd4)) +* **agent:** guard against off-topic, injection, oversized, and file-gen requests ([01674a8](https://github.com/fatblaine/suburblens/commit/01674a894a0103951b27b6d84f55616e8353a8bb)) +* **agent:** guard against off-topic, injection, oversized, and file-gen requests ([cc116dd](https://github.com/fatblaine/suburblens/commit/cc116ddb8a9b8ff484fe264d98cb3d633c173d2a)) +* **agent:** guard against off-topic, injection, oversized, and file-gen requests ([2836309](https://github.com/fatblaine/suburblens/commit/2836309295d0367289a4944b6991d91f2d345ba7)) +* **agent:** layered prompt-injection & off-topic guard ([d86f5ec](https://github.com/fatblaine/suburblens/commit/d86f5ece06182393478ed3abeff5d4576952a84d)) +* **agent:** layered prompt-injection & off-topic guard ([80f0e83](https://github.com/fatblaine/suburblens/commit/80f0e83491bf09a7f2451b688910a6a151446e66)) +* **agent:** layered prompt-injection & off-topic guard ([660149d](https://github.com/fatblaine/suburblens/commit/660149dce9d4dc11939e0328b97d2e1cc5432bc8)) +* **auth:** support mandatory email confirmation on sign-up ([5c1bab8](https://github.com/fatblaine/suburblens/commit/5c1bab80511652a057970a169efd06953743e1e2)) +* **auth:** support mandatory email confirmation on sign-up ([3868cac](https://github.com/fatblaine/suburblens/commit/3868cacb7b2325fb05cff6d0ad7372d918a63145)) +* **auth:** support mandatory email confirmation on sign-up ([ce8714e](https://github.com/fatblaine/suburblens/commit/ce8714e8faf689185f8345d2b07587d3ece795a1)) +* browser extension ([b65ab74](https://github.com/fatblaine/suburblens/commit/b65ab743d748df1e56c7e81904545f2be015410a)) +* browser extension - prod API, crime + education overlay, branded icon ([e0bac9f](https://github.com/fatblaine/suburblens/commit/e0bac9f2044ae930995983f38a5e97f6727f196e)) +* browser extension — prod API, crime + education overlay, branded icon ([789e8a2](https://github.com/fatblaine/suburblens/commit/789e8a2cffbfba046e9308c062788a6879d8f8a4)) +* Consolidate search indexing onto the custom domain ([55a193a](https://github.com/fatblaine/suburblens/commit/55a193a27e7cb30ad64a5c26446dfc1fbf2c9b80)) +* Create agent/graph.py, LangGraph ReAct agent graph ([f0e0f2b](https://github.com/fatblaine/suburblens/commit/f0e0f2bcc08ec5e19eaa4ecc89f9f4bb42fa6197)) +* Create agent/graph.py, LangGraph ReAct agent graph ([22f964f](https://github.com/fatblaine/suburblens/commit/22f964ff0915c364e9400aa51a5d5ce9d1db3ac2)) +* Create agent/server.py, FastAPI streaming service for the LangGraph agent ([848c9e1](https://github.com/fatblaine/suburblens/commit/848c9e1ba08be4aee50456104f67002cf76c7a0f)) +* Create agent/server.py, FastAPI streaming service for the LangGraph agent ([0240bb6](https://github.com/fatblaine/suburblens/commit/0240bb660a66d84d3fd9bad9fecee84d296cde40)) +* Crime benchmark - rank a suburb's incidents against Greater Melbourne ([4319c95](https://github.com/fatblaine/suburblens/commit/4319c95bcf787496ac5ca3d6a74fe312b1f5cc8f)) +* Crime benchmark - rank a suburb's incidents against Greater Melbourne ([4a93c70](https://github.com/fatblaine/suburblens/commit/4a93c7016a8f667ca48510e173a458b5e8c76820)) +* Crime benchmark - rank a suburb's incidents against Greater Melbourne ([57a1e99](https://github.com/fatblaine/suburblens/commit/57a1e99b1febec537b5d15a91b863bb7cc79942a)) +* crime data module for Greater Melbourne (VIC CSA yearly inciden… ([f6d5a6f](https://github.com/fatblaine/suburblens/commit/f6d5a6fd67979683cb0dce535c351bd2fcec0282)) +* crime data module for Greater Melbourne (VIC CSA yearly incidents, end-to-end) ([781494b](https://github.com/fatblaine/suburblens/commit/781494b03269ad762940cb2abca861db1445aa35)) +* crime data module for Greater Melbourne (VIC CSA yearly incidents, end-to-end) ([4a1d85f](https://github.com/fatblaine/suburblens/commit/4a1d85f9b4ef8297ed9c89fd12f8e245b66771f3)) +* Default/suggested questions in the AI assistant (chips + instant FAQ) ([6fae54c](https://github.com/fatblaine/suburblens/commit/6fae54cde4ac8846ec6d60c346b9ed4faff0d058)) +* Default/suggested questions in the AI assistant (chips + instant FAQ) ([7161f69](https://github.com/fatblaine/suburblens/commit/7161f69e7916a96eca118f4a2a219ed7d7b44331)) +* Default/suggested questions in the AI assistant (chips + instant FAQ) ([35c5cb9](https://github.com/fatblaine/suburblens/commit/35c5cb943f43ce826429f6e782bed70d6b67b6b9)) +* Develop frontend UI for chat agent ([c21cc75](https://github.com/fatblaine/suburblens/commit/c21cc7548c27ce35db0ef87b92b0d53eb29486c8)) +* Develop frontend UI for chat agent ([620c194](https://github.com/fatblaine/suburblens/commit/620c1948c379a838c9744da3690bf908937b4dc4)) +* Develop user login feature ([e7bd280](https://github.com/fatblaine/suburblens/commit/e7bd28054e34818fced239cb0cb5aa7d617ffaff)) +* Develop user login feature ([2c996d4](https://github.com/fatblaine/suburblens/commit/2c996d434076a315548dbe7a95dd6081b0d9e7f5)) +* Education benchmark - rank a suburb's university-qualified share against its city ([78cac54](https://github.com/fatblaine/suburblens/commit/78cac543f1d4edb9a47cc62658524bb98db7ee07)) +* Education benchmark - rank a suburb's university-qualified share against its city ([0a086cf](https://github.com/fatblaine/suburblens/commit/0a086cf9cb4c3e939bd7a9b2926b1c2781e871ae)) +* Education benchmark - rank a suburb's university-qualified share against its city ([80e9317](https://github.com/fatblaine/suburblens/commit/80e931722cc66d6037538e741dd25b5f4a40a6b9)) +* Education feature + chart fixes ([b016fab](https://github.com/fatblaine/suburblens/commit/b016fab65c0cf2bf825daec8f6ab2a0f3e6a3268)) +* Education feature + chart fixes ([#21](https://github.com/fatblaine/suburblens/issues/21)) ([3d993d0](https://github.com/fatblaine/suburblens/commit/3d993d0dd07bf4329ae17fbb9efcf42218ac0eb6)) +* expose crime data to the AI agent + search box UX polish ([3e3716f](https://github.com/fatblaine/suburblens/commit/3e3716f50b6d50f8085a4e8b8251341f3d6d3307)) +* expose crime data to the AI agent + search box UX polish ([542ffaa](https://github.com/fatblaine/suburblens/commit/542ffaaf909e1f8473133d3de3f328ca387f9b19)) +* expose crime data to the AI agent + search box UX polish ([e744e19](https://github.com/fatblaine/suburblens/commit/e744e197975db97c98ed36c28d8d4b9fb13fb509)) +* Extend the browser extension overlay to domain.com.au ([ced8088](https://github.com/fatblaine/suburblens/commit/ced8088ba7487cc42cde494b7dd0418ba5525876)) +* Extend the browser extension overlay to domain.com.au ([a9a4ed4](https://github.com/fatblaine/suburblens/commit/a9a4ed4cd40caf414fed65ab0447638b2bdf4baf)) +* Extend the browser extension overlay to domain.com.au ([63db038](https://github.com/fatblaine/suburblens/commit/63db0384a4e533e240f63c88e0e4ab690238f272)) +* Extension overlay - loading indicator (spinner + skeleton) during the API round-trip ([9ab7309](https://github.com/fatblaine/suburblens/commit/9ab7309e9dca1cb2303f0977900ad8b768ad1c3e)) +* Extension overlay - loading indicator (spinner + skeleton) during the API round-trip ([f546bfd](https://github.com/fatblaine/suburblens/commit/f546bfdc7476fab135bf9fea810b422c1a1d8e31)) +* **extension:** redesign overlay card to unified iconed stat list ([dd9ea6a](https://github.com/fatblaine/suburblens/commit/dd9ea6ac211ec1fc49e0eb333aaa9de18a09240b)) +* **extension:** redesign overlay card to unified iconed stat list ([d346f22](https://github.com/fatblaine/suburblens/commit/d346f22371c58c77e0cea9adf411538c87902e18)) +* **extension:** redesign overlay card to unified iconed stat list ([80a7877](https://github.com/fatblaine/suburblens/commit/80a78770bcc16e9c7730464be8fef97ecbff59c5)) +* Fade transition from login into home page ([7cca00f](https://github.com/fatblaine/suburblens/commit/7cca00f2a04c0461036d59d17ef68e770de39bdd)) +* Fade transition from login into home page ([1239324](https://github.com/fatblaine/suburblens/commit/1239324d33b691a7aacb56f85d7fb14490d17af2)) +* Fade transition from login into home page ([f0f12e3](https://github.com/fatblaine/suburblens/commit/f0f12e30fd5b8ae70ecf773cfce59f2b767bf096)) +* **frontend:** add Google Analytics 4 with SPA page-view tracking and usage events ([46ca344](https://github.com/fatblaine/suburblens/commit/46ca3447c4000862871b5d18f37c8bf1fa81535b)) +* **frontend:** add Google Analytics 4 with SPA page-view tracking and usage events ([ff125f2](https://github.com/fatblaine/suburblens/commit/ff125f25b24108424000241002f2367f257bbce6)) +* **frontend:** add Google Analytics 4 with SPA page-view tracking and usage events ([f082160](https://github.com/fatblaine/suburblens/commit/f0821605b443432b6076f0ed9293bd490d705166)) +* **frontend:** add Microsoft Clarity analytics and disclose it in the privacy policy ([1c0dd52](https://github.com/fatblaine/suburblens/commit/1c0dd525a6f975e98cf6693f84c1fcb56dc5503a)) +* **frontend:** add Microsoft Clarity analytics and disclose it in the privacy policy ([ef2bdf9](https://github.com/fatblaine/suburblens/commit/ef2bdf96c324cbde422575a755b25c104674413a)) +* **frontend:** add PDF export to Compare page ([9e647e9](https://github.com/fatblaine/suburblens/commit/9e647e90f14adc1fb31f55249261faf4da1208f0)) +* **frontend:** add PDF export to Compare page ([01c2e0f](https://github.com/fatblaine/suburblens/commit/01c2e0fb0f7c758be284236a39778a3f4643d621)) +* **frontend:** add per-page titles and Open Graph defaults ([779d92f](https://github.com/fatblaine/suburblens/commit/779d92f3292ee493e16dc187203e6c00281f7193)) +* **frontend:** add per-page titles and Open Graph defaults ([4669af4](https://github.com/fatblaine/suburblens/commit/4669af44cb1ee9954be1a0d7cb68f338cb108187)) +* **frontend:** add per-page titles and Open Graph defaults ([9f38fbd](https://github.com/fatblaine/suburblens/commit/9f38fbdb6c9c5d247d57c5019045716440e1dacd)) +* **frontend:** add robots.txt and sitemap.xml for search indexing ([f730d7c](https://github.com/fatblaine/suburblens/commit/f730d7c495c20cef77b614aa02c1091a7bd59d08)) +* **frontend:** add robots.txt and sitemap.xml for search indexing ([4093677](https://github.com/fatblaine/suburblens/commit/409367747937a467adef906f2d47eb90635678e3)) +* **frontend:** add self-hosted popular-suburb counter on the home page ([52dfbf4](https://github.com/fatblaine/suburblens/commit/52dfbf48b6c2e3147fc188994a32f6d6d1446a5b)) +* **frontend:** add self-hosted popular-suburb counter on the home page ([aa92d75](https://github.com/fatblaine/suburblens/commit/aa92d75fbadfb450909c1e7de65a06dac8737dad)) +* **frontend:** add self-hosted popular-suburb counter on the home page ([12d235c](https://github.com/fatblaine/suburblens/commit/12d235c6aaf1b92ee31279df2ddbed527fe21510)) +* **frontend:** highlight the standout suburb in each row of the expo… ([20be927](https://github.com/fatblaine/suburblens/commit/20be927d9cbe38809a5d74140bf642e4b02d9b85)) +* **frontend:** highlight the standout suburb in each row of the export PDF ([59da059](https://github.com/fatblaine/suburblens/commit/59da05986ff074a81ce7d9835dd2cf19cfb07c60)) +* **frontend:** highlight the standout suburb in each row of the export PDF ([90bf0c5](https://github.com/fatblaine/suburblens/commit/90bf0c530ff06f2ef9416fe13cf8e37408642766)) +* **frontend:** link the published Chrome extension from the home page ([41b7d01](https://github.com/fatblaine/suburblens/commit/41b7d0193917f338a2aded6aea1d81a8e0ce5801)) +* **frontend:** link the published Chrome extension from the home page ([9a19df4](https://github.com/fatblaine/suburblens/commit/9a19df4cc2014d4c83d22b594d9d7ea3470cc42c)) +* **frontend:** link the published Chrome extension from the home page ([acee8a8](https://github.com/fatblaine/suburblens/commit/acee8a881a7b1c5f8626346044f04fa471e7b460)) +* **frontend:** popular-suburb pills select into the search box instead of navigating ([855ec94](https://github.com/fatblaine/suburblens/commit/855ec943f3758e4b14fb3d25ef3e36331ab72d1b)) +* **frontend:** popular-suburb pills select into the search box instead of navigating ([0faa1b1](https://github.com/fatblaine/suburblens/commit/0faa1b1f81407036dfc545794209e4cd6fb3727b)) +* **frontend:** prerender per-suburb <head> for share cards + sitemap ([98ead4f](https://github.com/fatblaine/suburblens/commit/98ead4fd4adc93a463bca4918028caaa59c47175)) +* **frontend:** prerender per-suburb <head> for share cards + sitemap ([d5d3b77](https://github.com/fatblaine/suburblens/commit/d5d3b7750f8a438b5b5589de0ef97a4a99f3ebdb)) +* **frontend:** prerender per-suburb <head> for share cards + sitemap ([028b829](https://github.com/fatblaine/suburblens/commit/028b82930ae2c557dcf2c3aadb11c418c31f9c0b)) +* **frontend:** prerender per-suburb <head> for share cards + sitemap ([28efd71](https://github.com/fatblaine/suburblens/commit/28efd711044928c5b9de73b902a9bcac547d93ce)) +* **frontend:** redesign UI to Nocturne theme ([54f611f](https://github.com/fatblaine/suburblens/commit/54f611feb5b6b4b53f369b35d8283fd3299ff5e9)) +* **frontend:** redesign UI to Nocturne theme ([62f69ac](https://github.com/fatblaine/suburblens/commit/62f69acf5fc5fe8c30afe94863ba7d1b8695f5f5)) +* Heatmap server-side aggregation + Redis cache ([f9b434f](https://github.com/fatblaine/suburblens/commit/f9b434fffbc6c259422d9c796833df87416df082)) +* Heatmap server-side aggregation + Redis cache ([76466b8](https://github.com/fatblaine/suburblens/commit/76466b8c6ff12f71efa8bfc327ea9fd5c635d3e6)) +* Heatmap server-side aggregation + Redis cache ([4dd5e7c](https://github.com/fatblaine/suburblens/commit/4dd5e7cc733fcbea72922228068a2649d2b15548)) +* Implement horizontal snap-scroll for Nearby Suburbs section ([64f20b0](https://github.com/fatblaine/suburblens/commit/64f20b008808cd499e0a675463c0faf942accd8e)) +* Implement horizontal snap-scroll for Nearby Suburbs section ([8ad595e](https://github.com/fatblaine/suburblens/commit/8ad595e4344b31d6c8cbf76eb1f36df76df2f9b6)) +* Implement mobile bottom sheet for map info panel with tap-outside close ([c76df69](https://github.com/fatblaine/suburblens/commit/c76df698e5cead867acf32e1b06876ec07d1a77f)) +* Implement Supabase-backed persistent checkpointer + bounded history; Configure Supabase connection string and install dependencies ([aba2b9e](https://github.com/fatblaine/suburblens/commit/aba2b9ecc8b20fcc6067efeeda640d16d1fc1a6a)) +* Install Microsoft Clarity + disclose it in the privacy policy ([96cd4a9](https://github.com/fatblaine/suburblens/commit/96cd4a919eeef78cfe84f61947dc2594a925823d)) +* Make popular-suburb pills select into the search box instead of navigating ([c639de9](https://github.com/fatblaine/suburblens/commit/c639de9735fd6501fdf124203f65df3e18fbeca1)) +* Map info panel: mobile bottom sheet + tap-outside to close ([c6363b3](https://github.com/fatblaine/suburblens/commit/c6363b3f0eda8340e2764340a96687fb126dbacb)) +* Map info panel: mobile bottom sheet + tap-outside to close ([b4f0e84](https://github.com/fatblaine/suburblens/commit/b4f0e84b89738bed41dc57875c15d3818504c098)) +* Nearby Suburbs horizontal snap-scroll row ([b5de7e7](https://github.com/fatblaine/suburblens/commit/b5de7e7e48fe01a42f4ba7e0df6ef0040f7b225d)) +* prepare for Chrome Web Store submission ([1ee4249](https://github.com/fatblaine/suburblens/commit/1ee424924d8892dd9d9d288f23661d08a48e45cf)) +* prepare for Chrome Web Store submission ([7252465](https://github.com/fatblaine/suburblens/commit/7252465f5e09213d780792a664dc6dcc4a137c20)) +* prepare for Chrome Web Store submission ([c8bd481](https://github.com/fatblaine/suburblens/commit/c8bd4815deb20e09aa4795b3656ffce54a2a567f)) +* prewarm Lambda on search focus to hide cold-start latency ([ee20ff6](https://github.com/fatblaine/suburblens/commit/ee20ff687a934fe73db0f51faf09c611de73f2d4)) +* prewarm Lambda on search focus to hide cold-start latency ([7222ec2](https://github.com/fatblaine/suburblens/commit/7222ec2dd93d823d9bf82d0d8b4e6717bc6c2073)) +* prewarm Lambda on search focus to hide cold-start latency ([418bf28](https://github.com/fatblaine/suburblens/commit/418bf28844ff27f6ba33a62e732083b2fab5f566)) +* Set up the environment for AI agent developing and verify tool usage ([f406b45](https://github.com/fatblaine/suburblens/commit/f406b45080e7c95c1c0806d4b546ac4af34f8307)) +* Set up the environment for AI agent developing and verify tool usage ([f2cec48](https://github.com/fatblaine/suburblens/commit/f2cec484e2cde4190cc3d613a84eeeef7f2b0fbd)) +* show crime section on the Compare page ([bd44b63](https://github.com/fatblaine/suburblens/commit/bd44b632b82d908e673e9ad46b002a2a40a09149)) +* show crime section on the Compare page ([49a72ec](https://github.com/fatblaine/suburblens/commit/49a72ecd1904227826e2da776eb4f9aa20dd8af9)) +* show crime section on the Compare page ([8fabc30](https://github.com/fatblaine/suburblens/commit/8fabc30d47573299cf98d0d4e2912d757e338ee9)) +* typo-tolerant suburb search (pg_trgm trigram similarity) ([2a8f56c](https://github.com/fatblaine/suburblens/commit/2a8f56ca62cf4def1fa4dab34fe8c76523ff6b56)) +* typo-tolerant suburb search (pg_trgm trigram similarity) ([463ba32](https://github.com/fatblaine/suburblens/commit/463ba3270d677a6ece6e62cf3bab43451a47aa01)) +* typo-tolerant suburb search (pg_trgm trigram similarity) ([3f7de83](https://github.com/fatblaine/suburblens/commit/3f7de83debddbe41cbffe151ef6093a9760edabb)) + + +### Bug Fixes + +* Add graceful error recovery to agent tools (tools.py) ([369071f](https://github.com/fatblaine/suburblens/commit/369071fbccccec4b2c0028867cea10263ff1ae18)) +* **agent:** drop require_parameters so OpenRouter can route tool calls ([7e08017](https://github.com/fatblaine/suburblens/commit/7e080176c9a5e8cd609e14273f0ce8f383d6ca2b)) +* **agent:** keep salCode internal and stop leaking the summary node ([32d591b](https://github.com/fatblaine/suburblens/commit/32d591b7e26d673efd01f95f7c71563d12643455)) +* **agent:** keep salCode internal and stop leaking the summary node ([0e09fab](https://github.com/fatblaine/suburblens/commit/0e09fab76ab8325741d3940a96e83c77f7f7cc20)) +* **agent:** keep salCode internal and stop leaking the summary node ([92141eb](https://github.com/fatblaine/suburblens/commit/92141eb0ca6499ebc90c0edb187c1eabb225a7a9)) +* **agent:** namespace chat thread_id by authenticated user ([70859a8](https://github.com/fatblaine/suburblens/commit/70859a8b3178e72172090dcf1ca275647cee61d6)) +* **agent:** namespace chat thread_id by authenticated user ([8137afd](https://github.com/fatblaine/suburblens/commit/8137afd2c103627921493a283ffe3bd96390fec4)) +* **agent:** namespace chat thread_id by authenticated user ([d0080fa](https://github.com/fatblaine/suburblens/commit/d0080fa73017d3b142255b071a6e4050b5a97e4d)) +* **agent:** use valid guard classifier model and fail open on errors ([a0905c7](https://github.com/fatblaine/suburblens/commit/a0905c755398d00eaeeca11fa0be3857fd07a006)) +* allow dev Amplify origin in CORS ([6b10667](https://github.com/fatblaine/suburblens/commit/6b106673e17cb3e82945b7d3ae6d92e5f73af072)) +* **auth:** open data pages to signed-out visitors so shared links work ([7d909bb](https://github.com/fatblaine/suburblens/commit/7d909bb2f46510d2826871cfd2b2b9a41ac0f7c5)) +* **auth:** open data pages to signed-out visitors so shared links work ([67e7c62](https://github.com/fatblaine/suburblens/commit/67e7c62f80a403f32cdab76d501ab13f9e22710a)) +* **auth:** open data pages to signed-out visitors so shared links work ([cea0366](https://github.com/fatblaine/suburblens/commit/cea036653ec2b9323f43c174c7d914e5b7a17807)) +* Education feature + chart fixes & ignore data/sql directory ([383f4df](https://github.com/fatblaine/suburblens/commit/383f4df4f4f31fc445c49e0dd1af206b9e333d51)) +* fix agent connection to the server ([aa8f56b](https://github.com/fatblaine/suburblens/commit/aa8f56bc40b0d9f9c9284e10a9e80791c372d96b)) +* fix agent connection to the server ([dc37766](https://github.com/fatblaine/suburblens/commit/dc3776682d65382049a5e0e5536d5c21dc9371a1)) +* FIx Guest login issues ([2e62b1d](https://github.com/fatblaine/suburblens/commit/2e62b1d6423428f557f5666802cbf83525053966)) +* FIx Guest login issues ([301e356](https://github.com/fatblaine/suburblens/commit/301e356f66fda40c42da9fd24730a914f4b77a2a)) +* Fix OpenRouter tool-call leak (pin provider routing); ([aba2b9e](https://github.com/fatblaine/suburblens/commit/aba2b9ecc8b20fcc6067efeeda640d16d1fc1a6a)) +* Fix production map showing base tiles only (MapLibre "N1 is not defined") ([40509e8](https://github.com/fatblaine/suburblens/commit/40509e82b8ac814fbd80d1fed6ceab1bf295099a)) +* Fixed map zoom buttons unclickable (top bar swallowed the clicks) ([ce28980](https://github.com/fatblaine/suburblens/commit/ce2898066d6aadca26fa1f6974737ad62d1674df)) +* **frontend:** consolidate search indexing onto the custom domain ([92563f4](https://github.com/fatblaine/suburblens/commit/92563f480cac8134c2ee2d045a34d6a21056b97c)) +* **frontend:** consolidate search indexing onto the custom domain ([9786b02](https://github.com/fatblaine/suburblens/commit/9786b02f8ce14d7272a608f2fbbd9cd85c9f769b)) +* **frontend:** make the export PDF self-styled so it renders in production ([43e8e92](https://github.com/fatblaine/suburblens/commit/43e8e92183b823bc9755ec2d2d2a0dbc3e7db65c)) +* **frontend:** make the export PDF self-styled so it renders in production ([f694949](https://github.com/fatblaine/suburblens/commit/f6949494a2271380bdb9bf5cff0836e67ac48379)) +* **frontend:** prerender flat /suburb/<code>.html for Amplify rewrites ([aebb882](https://github.com/fatblaine/suburblens/commit/aebb8828d6b57adea508bb8c0ab56baebc554ddf)) +* **frontend:** prerender flat /suburb/<code>.html for Amplify rewrites ([726a4f8](https://github.com/fatblaine/suburblens/commit/726a4f86ae4251ed1e24523c1e5651b957a44db3)) +* **frontend:** record suburb views on the compare page ([763fdfc](https://github.com/fatblaine/suburblens/commit/763fdfc6c0da23708d2b4354575872e3d9362c99)) +* **frontend:** record suburb views on the compare page, not just the detail page ([6f4408a](https://github.com/fatblaine/suburblens/commit/6f4408a56213fe9df10d45c8a5d81822d84d9da7)) +* **frontend:** record suburb views on the compare page, not just the detail page ([54222c8](https://github.com/fatblaine/suburblens/commit/54222c88d235be4d7b24a0910ec5020c7a9daf7b)) +* **frontend:** reserve height for popular suburbs pills to remove layout shift ([0bb1f8b](https://github.com/fatblaine/suburblens/commit/0bb1f8b23c49fcc98321f37e2fb4907e3d131cdc)) +* **frontend:** reserve height for popular suburbs pills to remove layout shift ([70f4102](https://github.com/fatblaine/suburblens/commit/70f4102982571fb0aaf61d1046cb974a065c02a8)) +* **frontend:** satisfy react-hooks/set-state-in-effect lint rule ([16d179f](https://github.com/fatblaine/suburblens/commit/16d179f73ce8ee11d5d21fe77a88b5ad2fd5bf0c)) +* **frontend:** satisfy react-hooks/set-state-in-effect lint rule ([e0bc471](https://github.com/fatblaine/suburblens/commit/e0bc471fef5d342d1f0349737fde351486a016d6)) +* **frontend:** switch minifier to terser to fix broken production map ([b3caa1a](https://github.com/fatblaine/suburblens/commit/b3caa1aff6a6b0f8c3716b9bcd0c0092f9500f16)) +* **frontend:** switch minifier to terser to fix broken production map ([f9965c2](https://github.com/fatblaine/suburblens/commit/f9965c293a6b4bebfd2850657bafeff25d327c43)) +* Make the printed report self‑contained, without relying on the main site’s CSS. ([2dbb1a4](https://github.com/fatblaine/suburblens/commit/2dbb1a4198756b3ee2cbba2df96e2ed1540448cd)) +* map zoom buttons unclickable (top bar swallowed the clicks) ([c483244](https://github.com/fatblaine/suburblens/commit/c483244d45eefa36194878f2ad30271bb882f254)) +* map zoom buttons unclickable (top bar swallowed the clicks) ([91bab12](https://github.com/fatblaine/suburblens/commit/91bab1247de5bf5d2a065f84ad2c0c7089e168fa)) +* Mobile responsive fixes: AuthBadge, map page, TenureChart percentages ([ad44687](https://github.com/fatblaine/suburblens/commit/ad4468728f993afba6cb51c23fd6aa08a0d1be25)) +* Mobile responsive fixes: AuthBadge, map page, TenureChart percentages ([6bbdea8](https://github.com/fatblaine/suburblens/commit/6bbdea84243c5ecd85f080757ff1ba1d9a025a61)) +* Mobile responsive fixes: AuthBadge, map page, TenureChart percentages ([337e794](https://github.com/fatblaine/suburblens/commit/337e7949aef2a895e82cb070608b489f971a9cec)) +* Relevance-ranked suburb search autocomplete ([dc0c174](https://github.com/fatblaine/suburblens/commit/dc0c1742c22d12c8be752c04d0b02a3dfaa8eca3)) +* Relevance-ranked suburb search autocomplete ([385c12f](https://github.com/fatblaine/suburblens/commit/385c12febe15c3f1da7a5405110b49a86aed6c26)) +* Relevance-ranked suburb search autocomplete ([849933d](https://github.com/fatblaine/suburblens/commit/849933d70251b94b36723fd0f90705dfdb25e423)) +* Remove biome ([a181161](https://github.com/fatblaine/suburblens/commit/a181161ab5427b066f3240007c48940f95339c11)) +* Remove biome ([ff5bac7](https://github.com/fatblaine/suburblens/commit/ff5bac7d39377451b7cef83374c305c1a8bab2a6)) +* Remove biome ([54816c0](https://github.com/fatblaine/suburblens/commit/54816c056168c066b31645dac10dd2e351c1ef1e)) +* Render AI assistant replies as Markdown ([a3c5e32](https://github.com/fatblaine/suburblens/commit/a3c5e32acb172e0820f4e4f8d88a8322af8184ab)) +* Render AI assistant replies as Markdown ([0f1f6de](https://github.com/fatblaine/suburblens/commit/0f1f6de685f05225d5765de9dc645022d01d1378)) +* Render AI assistant replies as Markdown ([365cb71](https://github.com/fatblaine/suburblens/commit/365cb7137a7f913245b898a172ab227c2c034d18)) +* resolve DB connection string from SSM SecureString at runtime ([eae5431](https://github.com/fatblaine/suburblens/commit/eae5431f9eeb31ab84cda04fe3836f7dd8030b01)) +* resolve DB connection string from SSM SecureString at runtime ([b082f31](https://github.com/fatblaine/suburblens/commit/b082f31ad5b6c8c9edfff0b8da783946299f0889)) +* resolve TS build errors blocking Amplify deploy ([2a7556e](https://github.com/fatblaine/suburblens/commit/2a7556e3963feec4aaa49f97e6e9b63b13fea1da)) +* resolve TS build errors blocking Amplify deploy ([64c413c](https://github.com/fatblaine/suburblens/commit/64c413ccc217eb48c46e0e2b3f1acd5518f81aed)) +* Return `{"error": "suburb not found"}` instead of throwing Exception directly ([d7fa0bd](https://github.com/fatblaine/suburblens/commit/d7fa0bd097c7f1e6fa1b50b99d940fb8d18e4e0e)) + + +### Documentation + +* add project README ([c340cde](https://github.com/fatblaine/suburblens/commit/c340cdedd18f17ce2352bb350bac829ad4c7cb13)) +* add project README ([0dac5b0](https://github.com/fatblaine/suburblens/commit/0dac5b05b48a6803cd87cecaa30a75a13913af4a)) +* add project README ([6756fa8](https://github.com/fatblaine/suburblens/commit/6756fa8dcb05495ab67e83df5e98652fee6fea36)) +* drop placeholder screenshots section from README ([cda724f](https://github.com/fatblaine/suburblens/commit/cda724fd2ceb04c6496c09662d1c33a73a712f85)) +* drop placeholder screenshots section from README ([7b0ec89](https://github.com/fatblaine/suburblens/commit/7b0ec89bb5ff77a073f4d2fdbf7a8b942c2bef94)) +* drop placeholder screenshots section from README ([b44a5d3](https://github.com/fatblaine/suburblens/commit/b44a5d3b4cd4602ae78e6ec46413f2ff6596b515)) From 25ac40f15a8bea5d3f498a99e0ed7f56e6a3eee9 Mon Sep 17 00:00:00 2001 From: Chenghao <79491873+fatblaine@users.noreply.github.com> Date: Wed, 5 Aug 2026 10:22:54 +1000 Subject: [PATCH 2/5] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a975f9e..b1a7711 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,7 @@ * add multi-suburb comparison with batch API endpoints ([#8](https://github.com/fatblaine/suburblens/issues/8)) ([2c7b217](https://github.com/fatblaine/suburblens/commit/2c7b21761d25ba36d3aa562144c9140fda05d949)) * Add per-user daily AI question limit ([bca8c5d](https://github.com/fatblaine/suburblens/commit/bca8c5d6ba48701ee2506a0b50717e5888afca64)) * Add per-user daily AI question limit ([7b84c46](https://github.com/fatblaine/suburblens/commit/7b84c46f4dcbf2aea8a698c9ba31702cb59ca17b)) -* add sitemap.xml and robot.txt ([876c7ad](https://github.com/fatblaine/suburblens/commit/876c7ad8197f85049804688090a6aa091dc2a6f9)) +* add sitemap.xml and robots.txt ([876c7ad](https://github.com/fatblaine/suburblens/commit/876c7ad8197f85049804688090a6aa091dc2a6f9)) * **agent:** add security event logging to the prompt-injection guard ([0322b14](https://github.com/fatblaine/suburblens/commit/0322b14caae6d4173a9ef5a6c66c9592d16656c0)) * **agent:** add security event logging to the prompt-injection guard ([f04c9ee](https://github.com/fatblaine/suburblens/commit/f04c9ee97c77013419586ebc2b4a86025281e82c)) * **agent:** add security event logging to the prompt-injection guard ([527042e](https://github.com/fatblaine/suburblens/commit/527042e142879c0358ac3ef87fbef5617e2e2fd4)) From 1d96dca535c51bf982ea7f8aa4f04ba469e9ca2e Mon Sep 17 00:00:00 2001 From: fan <969103266@qq.com> Date: Thu, 6 Aug 2026 17:51:38 +1000 Subject: [PATCH 3/5] feat: add dormant AdSlot component and unfilled-slot CSS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stage the AdSense ad-unit code ahead of approval so placement is a one-liner once real data-ad-slot IDs exist (adsense-plan §3.5). Not wired into any page yet. AdSlot renders one (client ca-pub-5982385876517812) in a Nocturne card with an Advertisement label. A pushed ref keeps adsbygoogle.push() idempotent under StrictMode; callers pass a route-changing key to remount. index.css collapses unfilled/blocked slots so they leave no gap. --- frontend/src/components/AdSlot.tsx | 64 ++++++++++++++++++++++++++++++ frontend/src/index.css | 7 ++++ 2 files changed, 71 insertions(+) create mode 100644 frontend/src/components/AdSlot.tsx diff --git a/frontend/src/components/AdSlot.tsx b/frontend/src/components/AdSlot.tsx new file mode 100644 index 0000000..b8d2fe5 --- /dev/null +++ b/frontend/src/components/AdSlot.tsx @@ -0,0 +1,64 @@ +import { useEffect, useRef } from 'react' + +declare global { + interface Window { + adsbygoogle?: unknown[] + } +} + +const CLIENT = 'ca-pub-5982385876517812' + +// One AdSense ad unit. NOT wired into any page yet — placement waits until the +// AdSense account is approved and real `data-ad-slot` IDs exist (adsense-plan +// §3.5 / §3.6). Until then this component is dormant. +// +// Two things it has to defend against in a React Router SPA: +// 1. StrictMode runs effects twice in dev, and React can re-run an effect on +// re-render. Pushing the same twice makes AdSense throw +// "already have ads in them". The `pushed` ref makes the push idempotent. +// 2. React Router reuses DOM nodes across routes, so navigating from one +// suburb to another would keep the already-filled and never refresh. +// Callers must pass a `key` that changes with the route (see §3.6 usage) +// to force a remount. +// +// If an ad blocker is present the script never loads, push() throws, and the +// stays empty — the wrapper collapses via the [data-ad-status] rule in +// index.css so there is no dead space. +export default function AdSlot({ + slot, + className = '', +}: { + slot: string + className?: string +}) { + const pushed = useRef(false) + + useEffect(() => { + if (pushed.current) return + pushed.current = true + try { + ;(window.adsbygoogle = window.adsbygoogle ?? []).push({}) + } catch { + // Script blocked or not loaded yet. Leaving the slot empty is the correct + // outcome, and retrying just spams the console. + } + }, []) + + return ( +
+
+ Advertisement +
+
+ +
+
+ ) +} diff --git a/frontend/src/index.css b/frontend/src/index.css index 680eadd..0a2c94a 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -158,3 +158,10 @@ body { font-family: var(--font-sans); -webkit-font-smoothing: antialiased; } + +/* AdSense marks a slot it could not fill with data-ad-status="unfilled". + Without this the empty still occupies vertical space and leaves a + visible gap — most obvious for users running an ad blocker (adsense-plan §3.5). */ +ins.adsbygoogle[data-ad-status='unfilled'] { + display: none !important; +} From b698284d87182c35458068411188731841359f22 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 11 Aug 2026 02:32:30 +0000 Subject: [PATCH 4/5] chore(main): release suburblens 1.2.0 --- .github/.release-please-manifest.json | 2 +- CHANGELOG.md | 30 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/.github/.release-please-manifest.json b/.github/.release-please-manifest.json index 5fdd883..c3f1463 100644 --- a/.github/.release-please-manifest.json +++ b/.github/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "1.1.0" + ".": "1.2.0" } diff --git a/CHANGELOG.md b/CHANGELOG.md index b1a7711..39b6d1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,35 @@ # Changelog +## [1.2.0](https://github.com/fatblaine/suburblens/compare/suburblens-v1.1.0...suburblens-v1.2.0) (2026-08-11) + + +### Features + +* Add a reusable site footer and mount it across the main pages ([e6414e6](https://github.com/fatblaine/suburblens/commit/e6414e6d73eefe1efd6d0be1ed994a18a216600e)) +* add about page ([870c115](https://github.com/fatblaine/suburblens/commit/870c1159ec4acc5fb86f39c6797827b4c857ee37)) +* add about page ([0aa4227](https://github.com/fatblaine/suburblens/commit/0aa4227a6dc5253dd3b4883d9e75c6d7a0d890e2)) +* add AdSense verification script and ads.txt ([f8069b3](https://github.com/fatblaine/suburblens/commit/f8069b396e88d880d6ac2429cae82c7868346153)) +* add methodology and all-suburbs index pages ([342a4da](https://github.com/fatblaine/suburblens/commit/342a4daedc993d25c55011a4b96121c1637843c1)) +* add methodology and all-suburbs index pages ([878807b](https://github.com/fatblaine/suburblens/commit/878807b3a1b868070290080c5a6b1a77ca1b5cc8)) +* add natural-language suburb discovery to the AI agent ([2b2975d](https://github.com/fatblaine/suburblens/commit/2b2975d1e184ecbfef7c17ae4ffdf7dddfd74124)) +* add per-suburb editorial narrative paragraph ([c287ac9](https://github.com/fatblaine/suburblens/commit/c287ac9f46f4be3f007ea064976f1e7f15bd35f0)) +* add per-suburb editorial narrative paragraph ([3db7158](https://github.com/fatblaine/suburblens/commit/3db7158c1a56fd11258c00f51e2ea2aea9d6fcd5)) +* add site footer linking about and privacy ([edb6cf1](https://github.com/fatblaine/suburblens/commit/edb6cf12b8a54a669371e6f57df82ef084539e67)) +* add site footer linking about and privacy ([f55b72b](https://github.com/fatblaine/suburblens/commit/f55b72bc96c73a79a99e385fa5fa71720992df88)) +* AdSense readiness — content hardening, verification & privacy disclosure ([a80a45a](https://github.com/fatblaine/suburblens/commit/a80a45acede43888092cd8c0f196031b725ea03f)) +* AdSense verification + advertising privacy disclosure ([8edbcb7](https://github.com/fatblaine/suburblens/commit/8edbcb7cd5c072634b3a811eb8dd4704cc4b402f)) +* disclose advertising in the privacy policy ([70848ee](https://github.com/fatblaine/suburblens/commit/70848ee831c2523f10c8e0b707fce135d6404178)) +* natural-language suburb discovery in the AI agent ([bd52666](https://github.com/fatblaine/suburblens/commit/bd526661b11a0621e16c5c0c6077ae8e097b93d9)) +* prerender suburb narrative into the page body ([de189c3](https://github.com/fatblaine/suburblens/commit/de189c385a315b43b90112ad4eebc0814c9094d8)) +* prerender suburb narrative into the page body ([5fb8f63](https://github.com/fatblaine/suburblens/commit/5fb8f63e3f2d04279389773b1b8d9b5c46e5d7af)) + + +### Refactors + +* **api:** dedupe tenure/gccsa queries and add error+input guards ([edcf169](https://github.com/fatblaine/suburblens/commit/edcf1698b4ac54e1806e295aebc93d52279052fa)) +* backend query/error dedup + frontend query dedup & a11y ([57bef50](https://github.com/fatblaine/suburblens/commit/57bef50af6b7c3a079e8b510f10819634deb6450)) +* **frontend:** dedupe suburb queries and improve accessibility ([f923851](https://github.com/fatblaine/suburblens/commit/f923851106c96e70d0c2d39e1e3ddacfd5c90d62)) + ## [1.1.0](https://github.com/fatblaine/suburblens/compare/suburblens-v1.0.0...suburblens-v1.1.0) (2026-08-05) From 48e642324030f363f4c5fc01f6a7f2b70f1e42f9 Mon Sep 17 00:00:00 2001 From: fan <969103266@qq.com> Date: Thu, 13 Aug 2026 17:07:42 +1000 Subject: [PATCH 5/5] feat(ads): place first adsense unit on suburb detail page Wire the previously dormant AdSlot into SuburbDetailPage now that the AdSense account is approved and a real Display ad unit (slot 8314950736) exists. One non-intrusive slot at the end of the stacked card list, keyed to urlSalCode so it refreshes when navigating between suburbs. Auto ads left off. --- frontend/src/pages/SuburbDetailPage.tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/frontend/src/pages/SuburbDetailPage.tsx b/frontend/src/pages/SuburbDetailPage.tsx index 42eff0a..f23cb33 100644 --- a/frontend/src/pages/SuburbDetailPage.tsx +++ b/frontend/src/pages/SuburbDetailPage.tsx @@ -3,6 +3,7 @@ import { useParams, useNavigate, useSearchParams } from 'react-router-dom' import SuburbCard from '../components/SuburbCard' import PageMeta from '../components/PageMeta' import Footer from '../components/Footer' +import AdSlot from '../components/AdSlot' import { useSuburbTenure, recordSuburbView } from '../api/suburbs' import { track } from '../lib/analytics' @@ -111,6 +112,8 @@ export default function SuburbDetailPage() { ))} + +