๐Ÿ“Œ Bow-lletins

A single, organized, and searchable platform for UH Mฤnoa campus information โ€” jobs, events, internships, study groups, and more.

CI Badge
View Live Site โ†’

๐Ÿง  Project Overview

Students at UH Mฤnoa often miss opportunities because information is scattered across bulletin boards, emails, and social media. Bow-lletins solves this by providing a single, organized, and searchable platform for campus information. Users can post, browse, save, and RSVP to flyers for jobs, events, internships, volunteer opportunities, study groups, clubs, and more.

๐Ÿ‘ฅ The Team

Tamela Brinson Tamela Brinson
Lead Developer
Annie Pham Annie Pham
Community Manager
Terisa Lau Terisa Lau
Project Manager
Thomas Tran Thomas Tran
Content Curator
Caden Tran Caden Tran
Visual Designer

๐Ÿ–ผ๏ธ User Guide

๐ŸŒ Website Pages

Landing Page

Landing Page

The first page a visitor sees. The color scheme reflects UH Mฤnoa school colors. Users can log in directly from this page or navigate to sign up.

Sign Up Page

Sign Up Page

New users register with a name, username, email, and password. Passwords must be 8+ characters and include uppercase, lowercase, a number, and a special character.

Customize Profile

Customize Profile Page

After signing up, users can set their major, display name preference, and profile avatar.

Home Profile

Profile Home View

The profile card shown in the dashboard sidebar with avatar, name, and major.

Home Dashboard

Home Dashboard

Authenticated users are brought here after logging in. The sidebar shows the user's avatar, name, and major with navigation tabs.

  • Home โ€” stat cards (saved, created, expired counts) and recent flyers
  • Saved Flyers โ€” all flyers the user has saved
  • My Flyers โ€” flyers the user created, with Edit and View Interest buttons
  • Expired Flyers โ€” past flyers no longer active
  • Create a Flyer โ€” shortcut to the flyer creation form
  • Admin Dashboard โ€” visible only to admin accounts
About Page

About Page

Explains the problem Bow-lletins solves, the team's vision, and the platform's goals. Includes problem cards and feature vision cards.

Explore Page

Explore Page

Browse all active flyers in one place. Filter by category or date posted, sort by Most Recent or Most Liked. Three tabs: All, Recent, and Liked. Results are paginated (8 per page on desktop, 4 on mobile).

Categories Page

Categories Page

Flyers are organized into 8 categories. Clicking a category opens a filtered page showing only flyers in that category.

  • Jobs
  • Internships
  • Volunteer
  • Events
  • Academics
  • Social
  • Clubs & Organizations
  • Other
Create Flyer

Create Flyer Page

Signed-in users can post a flyer with title, description, category, date, location, and contact info. Includes a color picker with 6 pastel presets and a privacy toggle (private flyers are only visible to the owner).

Flyer Detail

Flyer Detail Page

Full detail view with all flyer fields. From here users can Save, RSVP, or Share the flyer. Flyer owners also see Edit and View Interest buttons โ€” View Interest shows the full RSVP list with name, email, and major.

Announcements

Announcements Page

Authenticated users can view site-wide announcements posted by admins, displayed as colorful sticky notes with a handwritten font. Each note shows title, body, date, and an Admin badge.

Contact Page

Contact Page

Any visitor can submit a message to the team via a contact form. The page also displays team member cards with each person's role and email.


๐Ÿ” Admin Pages

These pages are only accessible to users with the Admin role.

Admin Dashboard

Admin Dashboard

Admin accounts access a protected dashboard with stat cards: total users, total flyers, total saves, and unread contact messages.

Admin Users

Admin โ€” Manage Users

View all registered users with their ID, name, email, major, and role.

Admin Flyers

Admin โ€” Manage Flyers

View, edit, or delete any flyer on the platform regardless of who created it.

Admin Messages

Admin โ€” Contact Messages

Read all contact form submissions. Messages are marked as new or read.

Admin Announcements

Admin โ€” Post Announcements

Compose and delete site-wide announcements. Posted announcements appear to all logged-in users on the Announcements page.

User Permissions

Not Logged In

  • Browse and search flyers
  • View flyer details
  • Submit a contact message

Logged-In Users

  • Create, edit, delete own flyers
  • Save flyers to collection
  • RSVP to flyers
  • View announcements
  • Change password

Admin Users

  • All logged-in permissions
  • Manage all users and flyers
  • Read contact messages
  • Post and delete announcements

๐Ÿ’ฌ Community Feedback

We had 5 community members from UH Mฤnoa test the application and provide feedback.

๐Ÿ› ๏ธ Developer Guide

1

Clone the repository

git clone https://github.com/bowlletins/Bowlletins.git
cd Bowlletins
2

Install dependencies

npm install
3

Set up environment variables

Create a .env file in the project root:

DATABASE_URL=postgresql://USER:PASSWORD@HOST:PORT/DATABASE
AUTH_SECRET=your_secret_here
AUTH_URL=http://localhost:3000

For email-based password resets, also add:

EMAIL_SERVER_HOST=smtp.example.com
EMAIL_SERVER_PORT=587
EMAIL_SERVER_USER=your@email.com
EMAIL_SERVER_PASSWORD=yourpassword
EMAIL_FROM=no-reply@bowlletins.com
4

Set up the database

npx prisma generate
npx prisma db push
5

Run the development server

npm run dev

Open http://localhost:3000 in your browser.

Useful Scripts

CommandDescription
npm run devStart the development server
npm run buildBuild for production
npm run startRun the production server
npm run lintRun ESLint

Project Structure

src/
โ”œโ”€โ”€ app/
โ”‚   โ”œโ”€โ”€ about/             # About page
โ”‚   โ”œโ”€โ”€ admin/             # Admin dashboard and announcements manager
โ”‚   โ”œโ”€โ”€ announcements/     # Announcements page (auth required)
โ”‚   โ”œโ”€โ”€ auth/              # Sign up, sign out, forgot/reset/change password
โ”‚   โ”œโ”€โ”€ categories/        # Category browse + dynamic [category] pages
โ”‚   โ”œโ”€โ”€ contact/           # Contact form and team page
โ”‚   โ”œโ”€โ”€ create-flyer/      # Create flyer form
โ”‚   โ”œโ”€โ”€ explore/           # Browse all flyers with filters
โ”‚   โ”œโ”€โ”€ flyers/[id]/       # Flyer detail, edit, and RSVP list
โ”‚   โ”œโ”€โ”€ homeDashboard/     # User dashboard with tabs
โ”‚   โ””โ”€โ”€ profile/           # Profile settings
โ”œโ”€โ”€ components/            # Reusable UI components
โ””โ”€โ”€ lib/                   # Auth config, server actions, page protection

prisma/
โ””โ”€โ”€ schema.prisma          # Database models and enums

public/
โ””โ”€โ”€ images/                # Static assets

Making Yourself an Admin

After creating an account, run the following against your database:

UPDATE "User" SET role = 'ADMIN' WHERE email = 'your@email.com';

Data Models

ModelPurpose
UserAccounts with roles (USER / ADMIN), profile info, major
FlyerBulletin posts with category, color, RSVP list, save list, privacy toggle
AnnouncementAdmin-created site-wide messages
ContactMessageContact form submissions with read/unread status
PasswordResetTokenTokens for email-based password resets

๐Ÿ“Œ Project Boards