Project Info
Inspiration
In Bali, animal rescue is often coordinated through scattered social media posts, group chats, and private messages. Rescuers may receive incomplete information, potential adopters can be difficult to verify, and urgent cases can disappear beneath newer posts. I wanted to explore a safer and more organized alternative. Furly is not a marketplace, and animals are never treated as products. It is a rescue coordination network designed to help rescued animals move from first report to verified care, foster support, and a responsible home. Every rescue deserves a safe way home. What Furly does Furly connects rescued animals with rescuers, adopters, foster homes, volunteers, and veterinary partners. The prototype includes: Discovery for dogs, cats, and other companion animals Animal profiles with photos, rescue stories, health information, compatibility details, and current needs Approximate public locations without exposing private home addresses Clear rescuer and veterinary verification information Structured adoption applications Rescue timelines and follow-up information Requests for foster care, medical help, transport, supplies, photography, and home checks Success stories showing an animal's journey from rescue to home How AI helps Furly uses AI as a rescue coordination assistant. A rescuer can enter rough or incomplete notes from the field. The assistant organizes them into: Confirmed information Unconfirmed information Missing details Follow-up questions A clearer public description Suggested next actions The rescuer must review and edit the result before publishing it. AI can also summarize adoption applications, identify missing information, highlight positive compatibility signals, and suggest interview questions. It does not generate a numeric adopter score, approve applications automatically, or replace human judgment. How I built it I built Furly with Codex and GPT-5.6, using Next.js, TypeScript, and Tailwind CSS. Codex helped me turn the initial social-impact idea into a structured product, plan the user journeys, create reusable components, implement the responsive interface, connect the prototype's interactions, and troubleshoot development and deployment problems. GPT-5.6 was used to develop and demonstrate the intelligence behind Furly's rescue-note assistant and application-review workflow. It helps transform unstructured information into useful, reviewable actions while keeping humans responsible for every important decision. The current version uses realistic local mock data so judges can explore the complete experience without creating accounts or supplying credentials. The data layer is structured so a future version can connect authentication, media, and persistent records through Supabase. Challenges I faced The biggest challenge was balancing automation with safety. Animal rescue contains incomplete information and emotional, time-sensitive decisions. I did not want AI to create false certainty or silently make adoption decisions. I designed the assistant to clearly separate known facts from assumptions and to ask for clarification when information is missing. Another challenge was creating a useful prototype within a short build period. I focused on demonstrating one connected rescue journey instead of building production infrastructure prematurely. I also had to resolve development and preview issues while making sure the important controls produced meaningful outcomes. What I learned I learned that responsible AI is not only about generating better answers. It is also about showing uncertainty, requesting missing context, preserving accountability, and knowing when a human must decide. I also learned how Codex can support an entire product workflow—from architecture and interface development to testing, debugging, and iteration—rather than being used only to generate isolated pieces of code.
What's next
Furly would begin with a pilot in Bali involving a small group of rescuers and veterinary partners. The next steps would include: Secure authentication and role-based access Persistent rescue and adoption records Media uploads and moderation Stronger identity and veterinary verification Private messaging with anti-scam protections Follow-up reminders after adoption Transparent veterinary discounts and legitimate care costs Multilingual and multi-country support Feedback from real rescuers before expanding the AI workflows Furly's long-term goal is to become trusted coordination infrastructure for animal rescue—helping more people act safely, helping rescuers spend less time organizing fragmented information, and helping more animals find the right home. From rescue to home.
Furly
From rescue to home.
Furly is a mobile-first rescue coordination prototype for OpenAI Build Week. It helps communities move companion animals from an incomplete report to verified care, foster support, responsible adoption and post-adoption follow-up.
Furly is not an animal marketplace. Animals are never treated as products, and consequential rescue or adoption decisions remain with people.
What Furly does
- Turns photos, descriptions and reporter answers into a structured rescue case
- Separates confirmed facts, unconfirmed observations and missing information
- Proposes editable rescue tasks that humans must accept
- Tracks transport, veterinary, foster and adoption progress
- Publishes privacy-safe animal journey profiles from verified information
- Helps people contribute through fostering, transport, supplies, photography, translation and other support
- Organizes adoption applications for human review without numeric scores or automatic decisions
- Supports English, Indonesian and Chinese UI choices
The primary demo follows Mango, a young dog reported near Sunset Road in Bali, from incomplete report through coordinated care and responsible placement.
Safety and privacy
Furly does not provide veterinary diagnoses, prescribe treatment, automatically dispatch responders, expose exact public addresses, approve adopters or invent partner availability. AI output is a draft that requires human review.
Private locations, phone numbers and WhatsApp details must remain server-side in a production deployment. The included demo uses local mock data and browser storage only. Do not use it for real sensitive rescue information without adding production authentication, authorization and durable storage.
Technology
- Next.js App Router and TypeScript
- React 19
- Tailwind CSS
- Vinext, Vite and Cloudflare Workers for ChatGPT Sites
- Repository interfaces for future relational and object-storage adapters
- Mock and real AI service abstractions
- Node's built-in test runner
Local setup
Requirements:
- Node.js 22.13 or newer
- pnpm
Install and run:
git clone https://github.com/campixl/furly.git
cd furly
pnpm install
pnpm dev
Open http://localhost:3000.
Quality checks:
pnpm lint
pnpm typecheck
pnpm test
pnpm build
No environment variables are required for the demo. When OPENAI_API_KEY is unavailable, Furly uses MockAIService so the complete prototype remains usable. The Sites deployment provisions D1 and R2 bindings for animal-profile drafts and uploaded photos.
For optional server-side integrations, configure secrets in the hosting platform rather than in browser code or committed files. Supported server variables include OPENAI_API_KEY and the WhatsApp Business variables documented in the notification section below.
Mock data
The main demo records live in src/lib/data.ts:
- Mango: an urgent rescue intake and coordination case
- Nori: a cat recovering in foster care with a vet-confirmed update
- Bumi: a successfully adopted dog with follow-up history
- Kiki: a foster-supported companion rabbit
- Help requests, tasks and sample adoption applications
To customize the demo:
- Edit the exported
animals,cases,helpRequestsandapplicationscollections insrc/lib/data.ts. - Keep IDs stable across related records, such as
animalIdandcaseId. - Use only approximate public locations and fictional contact details.
- Preserve source attribution such as community-reported, rescuer-confirmed or veterinarian-confirmed.
- Run
pnpm typecheck,pnpm testandpnpm buildafter changes.
Repository contracts are defined in src/lib/repositories.ts. They are designed so the local arrays can later be replaced by Sites-managed D1 or another relational store without changing the product flows.
AI architecture
The AIService abstraction supports:
- Rescue intake clarification
- Case-plan proposals
- Public-profile drafting
- Adoption-application summaries
MockAIService is the default fallback. OpenAIAIService is selected only when a server-side API key is available. No secret is exposed to client components. AI may organize and recommend, but it does not make medical, dispatch, moderation or adoption decisions.
WhatsApp notifications
Foster offers and adoption applications collect a private WhatsApp number with explicit contact consent. The demo calls a server-only notification endpoint. Without provider credentials, it returns a safe queued mock result.
A production integration can use:
WHATSAPP_ACCESS_TOKENWHATSAPP_PHONE_NUMBER_ID- Approved WhatsApp template names
FURLY_WHATSAPP_RECIPIENTS_JSON
Production delivery also requires recipient opt-in, approved templates, delivery logging, retries and server-side application records. Never commit these values or real phone numbers.
Storage and Sites deployment
The current prototype keeps its curated demo catalog in mock repositories. New animal-profile drafts use Sites-managed D1 for structured records and R2 for uploaded photos. A public production launch should also add profile ownership and role-based authorization before allowing broader access.
The storage model uses:
- Sites-managed D1 for animal-profile drafts now, with cases, tasks, applications and verification records planned
- R2 object storage for uploaded profile photos now, with video, voice notes and documents planned
- Sign in with ChatGPT for authenticated, server-authorized writes
- Sites runtime environment settings for secrets
See docs/SITES_STORAGE.md for the proposed data boundary and privacy model.
How Codex and GPT-5.6 were used
Codex, powered by GPT-5.6, accelerated implementation of the design system, responsive routes, typed domain model, mock repositories, case state machine, form validation, safety guardrails, tests, documentation and ChatGPT Sites packaging. It was also used to inspect failures, verify critical flows and prepare the deployable build.
The human team defined the product vision, target users, brand direction, safety boundaries, language choices and final adoption workflow. Humans remain responsible for moderation, medical care, responder coordination and every adoption decision.
Sustainable model
Core reporting, animal profiles, volunteer participation and adoption applications remain free. Possible future sustainability paths include completed-care veterinary referrals, newly adopted animal care plans, optional clinic workflows, ethical sponsored adoption kits, pet-care referrals and CSR-funded sterilization campaigns.
Payments and paid placement are not part of this MVP.
Project documentation
docs/INTERACTIONS.md: interaction and route auditdocs/SITES_STORAGE.md: production storage and privacy plan
License
Furly is available under the MIT License.
Analysis
View
Metric
- 6
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- CSSIn code
- Next.jsIn code
- ReactIn code
- SQLIn code
- Tailwind CSSIn code
- TypeScriptIn code
- JavaScriptClaimed
- OpenAIClaimed
- SupabaseClaimed
6 of 9 appear in the indexed code. 3 claimed on Devpost could not be matched to code, which may simply mean the tool leaves no trace in the repository.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
395 KB
Source files
67
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
campixl/furly
83 files · 2.2 MB · @ 16f798c
Structure
Interface
47 files · 57%Screens, components and styles rendered to the user.
API & routing
2 files · 2%Request entry points: routes, handlers and controllers.
Application logic
12 files · 14%Domain rules, services and shared utilities.
Background jobs
1 file · 1%Work run outside a request: tasks, workers and schedules.
Data & schema
1 file · 1%Schema definitions, migrations and data access.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- YAML48%
- TypeScript34%
- CSS15%
- Markdown3%
- SQL0%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 18- next
- react
- react-dom
- +15 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.