Givlahthe field guide

The Givlah field guide / 16 October 2026

A collection
takes a crew.

Give usable household items a new home by arranging the people, transport and time needed to collect them.

Built for the Sime Darby Property (SDP) University Hackathon 2026.

A neighbour wants your bookshelf. Someone has a van. Another person can help carry it. Givlah brings their offers into one collection plan, checks their declared availability across competing items, and asks everyone to confirm.

From “I'd like this” to “we can collect it.”

Start here · about a minute

  1. 1 Watch the demo3-minute captioned walkthrough
  2. 2 See how it worksOffers → crew → confirmation
  3. 3 Try itHosted demo not available yet
  4. 4 Run it yourselfLocal setup with synthetic data
For neighbours in one locality. The prototype covers owner-authorised furniture and simple non-electrical household items. It does not provide paid hauling, payments, route optimisation, chat, safety certification or guaranteed participation. Electrical goods, mattresses, hazardous waste and unconsented roadside items are excluded.

02 / Follow one item

The real app, step by step

These are screenshots captured from the running Django app in Microsoft Edge at 390 px. Every person, item, address and outcome is synthetic demo data. The item photos and in-app illustrations were generated with AI image tools. A controlled server clock advances to the collection window; no physical collection took place.

Preview of the Givlah Nearby screen with three fictional household items
Captioned demo

Watch the captioned demo on YouTube, or play it here with JavaScript enabled.

Watch on YouTube

The video includes captions; no sound is needed. Chapter links below follow the written app walkthrough. Select a screenshot to open its full-size capture.

Step 01

Start with the item

Aina chooses a photo, then adds condition, dimensions, carrying needs, collection times and a private pickup address. She declares permission to give the item away. Nearby shows the neighbourhood area.

Aina's Give an item form after choosing a bookshelf photo, with the item details entered
Photo first, details next. Only a sanitized copy is stored after publishing.

Step 02

Offers supply the missing roles

Ravi wants the bookshelf. Mei Ling offers her van for the full collection window and declares the item fits. Hafiz offers carrying help. Each person acts through their own account.

Mei Ling's transport offer with a collection window, a demo van and a declaration that the item fits
Interest alone cannot fill transport or carrying requirements.

Step 03

Find a compatible crew

The bookshelf and folding table share Mei Ling's van. The matcher finds a morning crew for the shelf while keeping the table plannable in the evening. A suggestion reserves nothing.

Find a crew shows the complete bookshelf crew and leaves the folding study table plannable
Plans consider other items that share a person or vehicle.

Step 04

Invite, then approve sharing

Aina invites the crew. Everyone's time is held for up to 20 minutes, or until collection start if sooner. Aina and Ravi each approve sharing their own exact location with this version of the crew.

Collection plan awaiting confirmations with four crew members and location sharing still pending
A temporary hold is not a confirmed collection.

Step 05

Everyone confirms for themselves

Once both locations are approved, all four people confirm the same plan and the full trip window. Only then is the plan Ready. A material change ends the old plan and requires fresh approvals and confirmations.

Collection plan marked Everyone confirmed, with all four crew members confirmed
Declared availability becomes a commitment only through confirmation.

Step 06

Two separate handover records

After the controlled clock reaches collection start, Aina records that the item was handed over. It stays pending until Ravi records receipt separately. Helpers cannot record for either party.

Handover timeline with both the owner and recipient records received and Handover recorded
Both records establish a recorded outcome, not independently observed physical reuse.

Step 07

Keep uncertainty visible

In a separate branch, Aina withdraws her handover record. Completion is removed and the plan needs review. After a collection may have started, the item cannot automatically return to the feed; both parties must say it stayed with the owner before reopening.

Handover confirmation in Needs review after the owner withdrew a record; the item is not automatically relisted
A retracted or conflicting record removes completion.

Step 08

Keep demo totals separate

Before that retraction, the outcomes screen shows one fictional handover in its separate demo disclosure. The real total stays zero. Counts include an observation period and the eligible published-listing denominator.

Outcomes page with zero real handovers and a separate expanded fictional demo count
No automatic kilograms, carbon or avoided-landfill estimates.

03 / The mechanism

Complete arrangements across items

For each item, Givlah combines an owner, a recipient, a transport provider and a distinct extra helper when needed. The recipient may also provide transport and is counted once. Carrying locally still needs a declared provider, but no vehicle.

  1. Build feasible candidates. All roles, suitability declarations and exact offered collection windows must agree. The reserved window includes loading, travel and unloading; the app does not calculate routes.
  2. Follow shared resources. Open listings connected by a shared person or vehicle form a batch. Independent groups cannot affect one another's choice.
  3. Choose the largest compatible set. Exact search maximises complete proposed handovers without overlapping any declared person or vehicle. Ties prefer earlier deadlines, older listings, then stable IDs. Existing holds and Ready plans stay reserved.
  4. Make bounded claims. The cap is eight open listings and 24 feasible combinations per batch, with a five-second solve budget. Over-limit or timeout results create no commitments and never claim a truncated optimum.

A small synthetic conflict

Item Aneeds P + X
Item Bneeds P + Y
Item Cneeds Q + X

All three use the same interval; other people are distinct. Choosing A first blocks B and C. Choosing B + C makes two complete arrangements. This constructed case explains the mechanism; it does not show how often such conflicts occur in a neighbourhood.

Rules: matching contract · G04–G11, G15

Privacy belongs to the plan

Coarse in public

Public cards show a neighbourhood zone. Exact pickup and destination details live in separate private records. GPS is requested only on a tap, with manual entry available.

Approved for this crew

Exact details require current membership, both location owners' approvals and the current live plan version. Invalidation, review or completion revokes access. Revocation cannot erase something already seen.

Sanitized photos

Accepted photos are decoded and re-encoded with metadata removed; originals are not stored. This does not remove faces or addresses pictured in the image. Owners still review visible content.

Seven-day retention

Private records expire seven days after closure, deadline or the last associated collection end, whichever is later. Access is blocked at expiry; purge runs on the next request or startup. An inactive local app has no scheduled deletion worker.

Rules: location and photo privacy · G01–G03, G12–G14, G18

Count what was recorded

A unique listing counts as handed over only when its owner and recipient separately agree. One record, a retraction or disagreement cannot count as completion. Real and synthetic outcomes stay separate; reported outcomes are not proof of avoided disposal or environmental benefit.

Rules: plan states and outcomes · G16–G17, G20

04 / Research & gap

Why collection needs coordination

Finding someone who wants an item can still leave transport, carrying help and a shared time to arrange. A 2023 study of unwanted household goods identifies coordination and practical enablement as issues in increasing reuse. That motivates our question; it does not establish demand for Givlah in Malaysian townships.

Existing alternatives already address parts of this work. Olio permits collection by a friend or neighbour; The Salvation Army Malaysia offers bulky-item collection enquiries. Tiptapp describes paid help, Furnish Forward advertises volunteer-mover pickups, and Nearby advertises multi-helper tasks. SignUpGenius supports role and time slots.

The gap we target

Givlah combines complete crews across items, checks shared people and vehicles, then connects approvals, confirmations, withdrawal recovery and two-party handover records. A careful spreadsheet can implement the same matching; reduced effort has not been measured.

What remains open

This is desk research and a local synthetic prototype. Competitors' full workflows were not tested. Resident demand, reliable transport participation, real handovers and environmental benefit remain unvalidated. No worldwide-first claim is made.

Public sources checked . Advertised capabilities are provider descriptions, not independently verified service results.

Read the full research, competitor comparison and evidence limits

05 / Evidence & boundaries

What has been checked

The repository defines acceptance scenarios G01–G20. Its draft status text predates implementation; scenario definitions are not a test report. The figures below come from checks executed on , against app commit d1c75a5.

Local verification, not field validation
CheckExecuted result
Django test suite77 tests passed. Covers permissions, image sanitation, coordination, concurrent writes, rollback, expiry, handover, retention and outcome counts.
Independent matcher comparison (G08)300 generated small cases agree with exhaustive feasible-subset enumeration; 112 cases have tied optima.
Clean local setupFresh clone and virtual environment: pinned dependencies installed, migrations applied, three fictional listings loaded, demo account switching and local server exercised.
Rendered walkthroughReal form submissions and separate synthetic-user browser sessions exercise offers, invitation, both location approvals, four confirmations, dual handover, retraction and outcome totals.

Tests and captured demo interactions use offline fixtures and a controlled clock. They establish local software behaviour, not service quality, safety, adoption or real-world impact. Run the current tests yourself with the command below.

Not yet verified

  • Real-device camera and GPS behaviour.
  • Home-screen installation over HTTPS on real phones.
  • A screen-reader pass.
  • A public multi-user deployment and its database/storage behaviour.
  • Use by real residents, physical handovers or environmental benefit.

06 / Try it

Hosted demo: not available yet

Demo URL pending

No public app instance is linked yet. The documentation site and the Django app are separate deployments.

The intended hosted demo is for synthetic data only, will reset periodically, and may be slow on first load. Its URL and reset schedule will be added when deployment exists. For now, run the local demo below.

Open local setup

07 / On your machine

Run it yourself

You need Git and Python 3.12 or newer. These instructions start a local development instance; they are not a production deployment recipe.

1. Clone and install

git clone https://github.com/Givlah/Givlah.git
cd Givlah
python -m venv .venv

Windows · PowerShell

.\.venv\Scripts\python.exe -m pip install -r requirements.txt
.\.venv\Scripts\python.exe manage.py migrate
.\.venv\Scripts\python.exe manage.py load_demo
$env:GIVLAH_DEMO_MODE = "1"
.\.venv\Scripts\python.exe manage.py runserver

macOS / Linux · shell

.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python manage.py migrate
.venv/bin/python manage.py load_demo
GIVLAH_DEMO_MODE=1 .venv/bin/python manage.py runserver

Open http://localhost:8000. Choose a labelled synthetic account on the sign-in page. The loader creates three fictional listings and offers that compete for one van. It does not create real residents or real handovers. To use ordinary account creation, run without GIVLAH_DEMO_MODE.

2. Follow the collection flow

As Aina, open the wooden bookshelf and find a crew. Invite the suggested crew, then use separate browser profiles or sign out and switch demo accounts to approve and confirm each person's part. The generated windows are two days ahead. Handover recording becomes available after the collection start; the screenshot walkthrough uses a controlled clock to demonstrate that later state.

3. Run the checks

# Windows
.\.venv\Scripts\python.exe manage.py test

# macOS / Linux
.venv/bin/python manage.py test

To refresh fictional fixtures locally, stop the server and run manage.py load_demo --reset with your virtual environment's Python. This deletes synthetic listings and their plans; it is not a production reset tool.

Local limits. SQLite and local sanitized-image storage are prototype choices. A phone's plain-HTTP LAN address does not support browser GPS or installation; use manual location entry. App installation, secure cookies, persistent storage, database choice and backup retention need separate deployment checks. The service worker provides an offline notice; it does not make coordination work offline.

Setup: repository README · settings and environment variables

08 / Further reading

Inside the prototype

Browser / PWADjango templates · small JS
Views & permission-filtered readsSession auth · forms · CSRF
Services & exact matcherState rules · short transactions
SQLite + sanitized mediaSeparate private-location records

Django 5.2 serves the app and owns authentication, validation and persistence. Coordination rules live in plain Python service functions. SQLite uses short IMMEDIATE write transactions with repeated overlap checks. Pillow sanitizes photos. There is no model API, route service, geocoder or paid provider on the critical path.

AI-use disclosure

Developed with the help of AI coding tools. The in-app illustrations and demo item photos were generated with AI image tools; they show fictional items, not real listings. This matches the repository disclosure. Automated checks and synthetic walkthroughs are not independent human validation.

This site's privacy

This static guide has no analytics, forms or tracking scripts. Fonts, images, CSS and JavaScript are served locally. Once a video is configured, clicking Play loads a youtube-nocookie.com iframe and allows YouTube to receive your request; nothing is sent there before that click. Following an external source link also opens that service. Your hosting provider may keep ordinary request logs.