Archive

/ Case study · Jun 2023 · Academy of Technology

Campus Exchange

A marketplace prototype for one college, where juniors buy, rent or take donated notes, textbooks and stationery from seniors. I designed every flow from listing to pickup and shipped it as a 26-page site with working sign-in, in four days.

Role
Designer & lead developer: every main page, Firebase sign-in, the product section and the inbox
Team
2, with Anannya Guchait (product detail pages)
Timeline
25–28 Jun 2023 · 33 commits, 31 of them mine
Stack
HTML, CSS, JavaScript, Firebase Auth
Campus Exchange screenshot

/ 01

The problem

Every new batch at college needs the same things: last year's notes, lab manuals, the university organiser, a drawing kit, a few textbooks. The seniors who just finished those courses have all of it, and most of it ends up in a cupboard.

The trade already happens, through WhatsApp groups and word of mouth, but you have to know the right person. Juniors pay full price for books a senior would happily sell, rent or give away, and nobody knows who has what.

/ 02

Approach

I scoped it to a single college, the Academy of Technology. That one decision answered a lot: buyers and sellers can meet on campus, so there's no shipping, and listings can show branch and year, which matters to students more than a star rating.

Then I mapped the whole exchange as screens: sign up, browse by category, open an item, place an order, talk to the seller and agree on a pickup. I added two flows that a normal shop doesn't need. Seniors list items to sell, rent or donate, and juniors post requests for things nobody has listed yet, which a senior can answer with one tap.

I designed the screens and built them as a static site on GitHub Pages, with Firebase handling real accounts. A teammate built the individual product pages in parallel, working through pull requests.

/ 03

What I built

  • Real accounts

    Email and password sign-up, login and logout through Firebase Auth. These work on the live site and are wired into every page.

  • Browse by category

    Stationery, notes and lab manuals, and books, each with its own listing page and a sidebar to switch between them.

  • Sell, rent or donate

    One listing form covers all three: photo, price, category and description, with a sell, rent or donate toggle.

  • Requests board

    Juniors post what they're looking for, such as 'Operating System notes (PCC-CS502)'. Each request has a Respond button that takes a senior straight to the listing form.

  • Seller context on every listing

    Each listing shows the seller's name, branch and year next to the price or a 'Donated' or 'Rented' label, so you know who you'd be meeting.

  • Inbox for pickups

    Orders open a conversation with the seller to arrange a time and place on campus. In this prototype the conversation is a designed mock-up, not live chat.

/ 04

How it works

  1. Pages
    • 26 static HTML pages
    • 14 stylesheets
    • GitHub Pages
  2. Behaviour
    • Vanilla JS modules
    • Page-to-page navigation
  3. Identity
    • Firebase Auth v9
    • Email & password
    • Analytics
Every page loads the modular Firebase SDK straight from Google's CDN, so the site needs no build step and deploys to GitHub Pages as-is. Listings, requests and chat are designed screens with sample data. The data layer is the next step.

/ 05

Hard parts

  1. 1

    Real auth on a site with no build step

    I wanted real accounts without a bundler or a server. Each page imports the Firebase v9 modules from the CDN in a native ES-module script, which keeps the site to plain files that GitHub Pages can serve.

    <script type="module">
      import { initializeApp } from "https://www.gstatic.com/firebasejs/9.10.0/firebase-app.js";
      import { getAuth, signInWithEmailAndPassword } from "https://www.gstatic.com/firebasejs/9.10.0/firebase-auth.js";
    
      const auth = getAuth(initializeApp(firebaseConfig));
      signInWithEmailAndPassword(auth, email, password)
        .then(() => (window.location.href = "./HomePage.html"));
    </script>
  2. 2

    Paths that broke after deploying

    Links between login and sign-up worked locally but failed once the site was served from a /CampusExchange/ subpath on GitHub Pages. Several commits went into fixing that switch, including a fallback to the absolute URL.

  3. 3

    Designing a closed loop, not just a shop

    A plain storefront would leave juniors stuck whenever nobody had listed what they needed. The requests board closes that gap. A request is a prompt to a senior, and Respond drops them into the listing form, so demand turns into supply.

/ 06

Design

The palette is calm navy and steel blue on an off-white page. It reads more like a campus notice board than a sale, with one warm mustard colour kept for the action that matters, 'Order here'. The wordmark is set in Amaranth, and everything else in Poppins.

The layouts borrow patterns students already know. Listings are image-left rows with price and seller, the requests page puts the form next to the live board, and the inbox is a two-pane messenger.

Looking back with a critical eye: the screens use fixed-pixel layouts and don't adapt to phones, which is where students would actually use this. The navigation uses click handlers on headings rather than real links, which shuts out keyboard and screen-reader users. A rebuild would fix both first.

  • Navy#27374D
  • Slate#526D82
  • Steel#9DB2BF
  • Mist#DDE6ED
  • Order#F0C14B

/ 07

Outcome

  • Designed and shipped a 26-page prototype in four days. It's still live on GitHub Pages.
  • Built working Firebase sign-up, login and logout across the site.
  • Collaborated through branches and two merged pull requests, including resolving conflicts.
  • Not yet built: saving listings and requests to a database, and live messaging between buyers and sellers. Those are the next milestones.

/ 08

What I learned

  • Scope is a design tool. Limiting it to one college removed shipping, payments and trust problems before any code was written.
  • A prototype should say what it is. Designed screens are a good way to test a flow, but in a product people would actually use, every screen needs data behind it.
  • Responsive and accessible from the start. Retrofitting fixed-pixel layouts and heading-based navigation costs more than building with flex, grid and real links from day one.

/ 09

Screens

Listings page with a category sidebar and rows for push pins, handwritten chemistry notes and a donated book, each with an Order here button
Buy: each listing shows the price (or 'Donated') and who's selling, by branch and year.
Requests page with an item request form on the left and a list of requested items with Respond buttons on the right
Request: juniors ask for what's missing, and Respond takes a senior straight to the listing form.
Listing form with an image upload, sell, rent or donate options, and product name, price and category fields
Sell: one form covers selling, renting and donating.
Inbox with a list of placed orders on the left and a conversation arranging a canteen pickup on the right
Inbox: the designed pickup conversation. In the prototype this pane is a static mock-up.

/ Next case study

News 60

The news in 60 words. A calm news reader with topic filters, search, bookmarks and Google/GitHub sign-in, built by a team of three in 21 hours.