Inspiration: what is the specific problem, and how do we know it is real?

Finding something nearby should be easier than knowing which organization's website to search first. Peninsula Neighbor started with a practical question: how could I find less obvious local activities, such as a public event at Peninsula Center, and also discover ways to help the community?

Researching the Palos Verdes Peninsula showed how the information is split across separate systems. The Palos Verdes Library District volunteer page asks applicants to be at least 14 and provide interests and availability; it also warns that openings may be limited. The City of Rancho Palos Verdes coyote page directs residents to a separate reporting form and sightings map. Local services, calendars, trail information, and emergency guidance have their own destinations. These useful resources exist, but a resident still has to connect them.

That is the problem this project addresses: turning scattered local information into a clear next step that fits someone's location, interests, age, schedule, and access needs. This is an independent community prototype, not a city website. The evidence presented here is personal motivation, public-source research, and functional testing; community impact has not yet been measured.

What it does

Peninsula Neighbor is a working community hub for Palos Verdes and the surrounding Peninsula. Residents can search events, volunteering, businesses, places, and resources, filter the results, save useful items, and follow original source links.

The community map is central to the experience. It supports zooming, panning, clustered pins, driving and walking directions, route distance, estimated travel time, and a Google Maps handoff. Visitors can choose an approximate neighborhood starting point or explicitly allow device location.

The accessible route finder brings together over 1,200 mapped access features and documented facilities. It shows OpenStreetMap ramp and entrance tags, offers wheelchair-aware routing and optional ramp waypoints, and accepts access-barrier reports. Missing slopes, curb heights, and closures remain unknown; this is not certified step-free navigation.

The coyote layer separates reviewed website reports from city-system summaries. Website sightings become public after administrator approval in approximate 1 km cells; city summaries retain a separate 24-hour delay. Both views link to official reporting. An empty map area is never presented as an all-clear.

Residents can also create accounts, manage interests, get recommendations with reasons, join discussions, send private replies, submit listings for review, and record volunteer hours. Self-reported hours and organization-confirmed hours are shown separately. Emergency resources and a private household checklist help residents prepare without pretending to provide live evacuation or shelter status.

Ask PV connects questions to both local sources and website actions. For example, asking where to report a coyote sighting points to the community map's submission flow and explains the separate official city channel. It includes searchable conversation history, reference notes, source links, and account actions such as bookmarking or creating a private plan.

How we built it

The interface uses React 19, TypeScript, Vinext/Vite, and custom CSS. Same-origin API handlers validate inputs with Zod and enforce account ownership and administrator authorization on the server. Cloudflare Workers hosts the application; Cloudflare D1 and Drizzle store accounts, preferences, community records, and private chat history.

Maps use Leaflet and OpenStreetMap. OSRM/FOSSGIS supplies driving and walking routes, Valhalla supplies wheelchair-aware routes, and Overpass supplies mapped accessibility features. Weather uses Open-Meteo with National Weather Service fallback and alerts. Listings retain source links, check dates, and known eligibility details.

AI mode runs the approximately 600-million-parameter Qwen3 0.6B model through WebLLM on compatible WebGPU devices. It retrieves relevant website reference notes before generating. A source-only mode works without downloading the model. Recommendations use explicit preference matching, so their reasons are inspectable. No paid AI inference or map API key is required; external services still have usage limits.

Challenges we ran into

Reliability was harder than adding feature buttons. External information can be stale, routes can have incomplete accessibility tags, and community submissions need a real review boundary. We kept official, community-reviewed, and unknown information distinct and excluded expired opportunities from current matching.

A small browser model also invented a concrete library-service detail during testing. Stronger prompting alone did not fix it. We added visible reference excerpts and a conservative final check that replaces drafts containing unsupported logistics or numbers with the retrieved source answer. This reduces that observed failure, but does not make every generated sentence trustworthy.

Testing also exposed an unsafe assumption in the discovery writer. It now requires the configured platform administrator and a same-origin request. The daily discovery task remains paused; an administrator can refresh the configured official calendars manually.

Accomplishments and what we learned

The result is a deployed full-stack application with working accounts, moderation, maps, community workflows, and source-grounded assistance. The current code passed 121 automated tests, TypeScript checks, a production build, and 15 local HTTP workflow groups, alongside desktop and mobile browser checks. Tests used disposable local accounts rather than residents' submissions. One complete browser backup-import check remains unverified because the browser extension blocked local file selection.

We learned that useful civic software needs clear provenance and boundaries as much as an appealing interface: explain why something is recommended, distinguish reported hours from confirmed hours, and show what the data cannot establish.

What's next

We would pilot the site with residents, students, organizations, and wheelchair users; measure whether people can find a suitable opportunity faster; and prioritize changes from their feedback. Next steps include field-checking access information with local partners, improving source coverage, and configuring secure unattended discovery before re-enabling scheduled imports. The private coverage dashboard currently measures catalog breadth, not proven neighborhood inequity.

AI assistance and credits

OpenAI Codex/ChatGPT was used extensively to assist with implementation, debugging, testing, documentation, and drafting this submission. Ask PV's runtime model is Qwen3 0.6B via WebLLM. The project uses open-source libraries and public data services credited in the repository. Local photographs retain their source and license credits; the home screenshot includes Point Vicente photography by Nhostetler, CC BY-SA 3.0. Map imagery credits OpenStreetMap contributors. Peninsula Neighbor is not government-affiliated.

Try the live project · Browse the implementation branch · Read the functional audit

Built With

Share this project:

Updates

Submission history