Bagiyo Core UI Design Guide
Bagiyo Core UI Design Guide
Section titled “Bagiyo Core UI Design Guide”Purpose
Section titled “Purpose”Bagiyo is a local community tool hub for Baguio City and Benguet.
The name comes from:
- Baguio — the city identity.
- Bagi-yo — a local phrase meaning “it’s yours.â€
The product should feel like a useful digital space owned by and made for locals.
Bagiyo is not a tourism website.
Bagiyo is not a corporate SaaS dashboard.
Bagiyo is not a government portal.
Bagiyo is a practical local toolkit for everyday community use.
Product Identity
Section titled “Product Identity”Core statement
Section titled “Core statement”Useful local tools for Baguio and Benguet.
Design intent
Section titled “Design intent”Bagiyo should feel:
- Local
- Calm
- Useful
- Trustworthy
- Modern
- Readable
- Community-centered
- Mountain-city inspired
It should not feel:
- Touristy
- Corporate
- Flashy
- Government-heavy
- Cyberpunk
- Generic dashboard-like
- Overdesigned
Emotional Direction
Section titled “Emotional Direction”Bagiyo should evoke:
- Baguio pine trees
- Mountain ridges
- Cool weather
- Fog and mist
- Rainy-day practicality
- Neighborhood familiarity
- Local trust
Use those ideas as subtle design influence, not literal decoration.
The interface should answer:
What useful local thing can I do here?
Not:
How do we make this look like a Baguio postcard?
Utility comes first. Identity supports utility.
Visual Direction
Section titled “Visual Direction”Recommended theme name
Section titled “Recommended theme name”Pine Mist
This is the default visual identity.
Mood:
- Cool
- Clean
- Fresh
- Calm
- Readable
- Local
- Practical
Secondary theme name
Section titled “Secondary theme name”Mountain Night
This is the dark mode.
Mood:
- Night fog
- Pine shadows
- Soft contrast
- Calm utility
- Readable in low light
Theme Strategy
Section titled “Theme Strategy”Bagiyo should support both light mode and dark mode.
The app should use one shared identity system:
Bagiyo Theme - Light mode: Pine Mist - Dark mode: Mountain NightRecommended default:
Default: Light mode / Pine MistOptional: Dark mode / Mountain NightReasoning:
- Many users will check local tools outdoors or during the day.
- Some users will check alerts at night, during outages, or during bad weather.
- Both modes improve usability.
- Using design tokens from the start prevents future theme rewrites.
Do not hardcode component colors.
All colors must go through semantic CSS tokens.
Color System
Section titled “Color System”Light Mode: Pine Mist
Section titled “Light Mode: Pine Mist”Use a misty, cool, green-gray base.
:root { --color-bg: #F4F7F2; --color-surface: #FFFFFF; --color-surface-muted: #EAF0EA;
--color-primary: #1F4D3A; --color-primary-hover: #173B2C; --color-primary-soft: #DDEADF;
--color-accent: #A66A3F; --color-accent-hover: #875432; --color-accent-soft: #F1E2D4;
--color-text: #1E2A24; --color-text-muted: #64726A; --color-text-subtle: #819087;
--color-border: #D8E1DA; --color-border-strong: #B9C8BE;
--color-danger: #B94A48; --color-danger-soft: #F4DADA;
--color-warning: #B7791F; --color-warning-soft: #F6E7C8;
--color-success: #2F6F4E; --color-success-soft: #DDEDE3;
--color-info: #3F6F8F; --color-info-soft: #DDEAF1;}Dark Mode: Mountain Night
Section titled “Dark Mode: Mountain Night”Use deep green-charcoal surfaces. Avoid pure black.
[data-theme="dark"] { --color-bg: #111814; --color-surface: #18231D; --color-surface-muted: #223128;
--color-primary: #8FCFA9; --color-primary-hover: #A8DDBB; --color-primary-soft: #223B2C;
--color-accent: #D0A16B; --color-accent-hover: #E0B680; --color-accent-soft: #3A2C20;
--color-text: #EDF4EF; --color-text-muted: #AAB8AF; --color-text-subtle: #82928A;
--color-border: #2B3A31; --color-border-strong: #3C5145;
--color-danger: #E07A73; --color-danger-soft: #3D2423;
--color-warning: #E0B25C; --color-warning-soft: #3A301E;
--color-success: #8FCFA9; --color-success-soft: #223B2C;
--color-info: #8EBAD4; --color-info-soft: #203340;}Semantic Token Rules
Section titled “Semantic Token Rules”Components must use semantic tokens.
Good:
.card { background: var(--color-surface); color: var(--color-text); border: 1px solid var(--color-border);}Bad:
.card { background: #ffffff; color: #111111; border: 1px solid #dddddd;}Use intent-based tokens for stateful UI:
.badge-success { background: var(--color-success-soft); color: var(--color-success);}
.badge-warning { background: var(--color-warning-soft); color: var(--color-warning);}
.badge-danger { background: var(--color-danger-soft); color: var(--color-danger);}Typography
Section titled “Typography”Use a clean, readable sans-serif.
Recommended font personality:
- Modern
- Human
- Friendly
- Slightly rounded
- Highly readable
Avoid:
- Playful fonts
- Condensed fonts
- Decorative fonts
- Overly futuristic fonts
- Heavy corporate fonts
Suggested CSS baseline:
:root { --font-sans: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
--font-size-xs: 0.75rem; --font-size-sm: 0.875rem; --font-size-md: 1rem; --font-size-lg: 1.125rem; --font-size-xl: 1.25rem; --font-size-2xl: 1.5rem; --font-size-3xl: 2rem;
--line-height-tight: 1.2; --line-height-normal: 1.5; --line-height-relaxed: 1.7;}Use readable body text.
Minimum body size:
16pxShape, Spacing, and Elevation
Section titled “Shape, Spacing, and Elevation”Bagiyo should use rounded but not childish shapes.
:root { --radius-sm: 0.375rem; --radius-md: 0.625rem; --radius-lg: 1rem; --radius-xl: 1.25rem; --radius-full: 999px;}Spacing
Section titled “Spacing”Use consistent spacing tokens.
:root { --space-1: 0.25rem; --space-2: 0.5rem; --space-3: 0.75rem; --space-4: 1rem; --space-5: 1.25rem; --space-6: 1.5rem; --space-8: 2rem; --space-10: 2.5rem; --space-12: 3rem; --space-16: 4rem;}Elevation
Section titled “Elevation”Use low shadows. The app should not feel floaty or glossy.
:root { --shadow-sm: 0 1px 2px rgba(30, 42, 36, 0.06); --shadow-md: 0 8px 24px rgba(30, 42, 36, 0.08);}In dark mode, prefer borders and surface contrast over heavy shadows.
Layout Direction
Section titled “Layout Direction”Bagiyo should feel like a tool hub, not a marketing landing page.
Recommended homepage structure:
Header - Bagiyo logo - Scope: Baguio & Benguet - Sign in / profile
Hero - Clear local product statement - Short explanation - Primary action: Browse tools
Tool Grid - Power outage alerts - Weather / rain watch - Road / traffic notes - Community notices - Emergency contacts - Saved alerts / subscriptions
Recent Updates - Latest outage notice - Latest advisory - Latest relevant local update
Footer - About - Privacy - ContactThe first screen must explain what Bagiyo is and what useful actions are available.
Avoid abstract hero sections that only look nice but do not help the user act.
Core Screens
Section titled “Core Screens”Build these first:
1. Home / Tool Hub2. Tool Detail Page3. Login / Profile4. Notification Rule Setup5. Admin / Moderation PageDo not design too many pages early.
The first release should prove:
- The brand works.
- The layout works.
- The tool cards work.
- Forms are usable.
- Alerts are readable.
- Authenticated actions are clear.
- Admin moderation is possible.
Header
Section titled “Header”The header should be simple and persistent.
Recommended contents:
Left: - Bagiyo logo / wordmark
Center or secondary text: - Baguio & Benguet
Right: - Theme toggle - Sign in / profile menuMobile:
Top row: - Logo - Profile / menu button
Optional: - Theme toggle inside menuHeader should not dominate the page.
Logo Direction
Section titled “Logo Direction”Avoid complex logos.
Recommended direction:
Wordmark: BagiyoSymbol: simple pine + mountain + location pin hybridPossible symbols:
- Pine tree shaped like a location pin
- Mountain ridge inside a rounded square
- Letter “B†with subtle pine/mountain cutout
- Fog line crossing a mountain silhouette
Logo rules:
- Must work at 32px.
- Must work in light and dark mode.
- Must work without gradients.
- Must not depend on tiny details.
- Must not look like a tourism board logo.
Visual Motifs
Section titled “Visual Motifs”Use subtle motifs only.
Recommended:
- Abstract mountain ridges
- Soft fog gradients
- Pine-needle accents
- Topographic contour lines
- Muted green-gray backgrounds
- Rounded cards with soft borders
Avoid:
- Literal pine tree clipart everywhere
- Heavy photo backgrounds
- Tourist postcard visuals
- Bright festival colors everywhere
- Overuse of Session Road/Burnham imagery
- Decorative elements that reduce readability
Tool Cards
Section titled “Tool Cards”Tool cards are a core component.
Each tool card should include:
IconTitleShort descriptionStatus badgePrimary actionExample content:
Power Outage AlertsGet notified when your area appears in scheduled or live outage notices.Rain & Weather WatchQuick local weather signals for daily planning.Road & Traffic NotesCommunity-friendly updates for routes, closures, and heavy traffic.Recommended structure:
<article class="tool-card"> <div class="tool-card__icon"></div> <div class="tool-card__body"> <h2>Power Outage Alerts</h2> <p>Get notified when your area appears in scheduled or live outage notices.</p> </div> <span class="badge badge-success">Available</span> <a class="button button-primary">Open tool</a></article>Visual rules:
- Cards should be easy to scan.
- Icons should have consistent stroke/weight.
- Description should be one sentence.
- Status should be visible but not loud.
- Primary action should be obvious.
Buttons
Section titled “Buttons”Buttons should be clear and utilitarian.
Types:
PrimarySecondaryGhostDangerExample CSS:
.button { min-height: 44px; padding: 0.625rem 1rem; border-radius: var(--radius-md); font-weight: 600; border: 1px solid transparent; cursor: pointer;}
.button-primary { background: var(--color-primary); color: var(--color-bg);}
.button-secondary { background: var(--color-surface); color: var(--color-text); border-color: var(--color-border);}
.button-ghost { background: transparent; color: var(--color-text-muted);}
.button-danger { background: var(--color-danger); color: var(--color-bg);}Minimum tap target:
44px heightForms are important because users may create notification rules, subscriptions, or preferences.
Form rules:
- Labels must always be visible.
- Placeholder text is not a label.
- Error text must be specific.
- Help text should be short.
- Inputs must be large enough for mobile.
- Validation errors should appear near the field.
Example:
Area keyword[ Irisan ]
Use words that usually appear in local advisories, such as barangay, road, sitio, or nearby landmark.Avoid vague errors.
Bad:
Invalid input.Good:
Use at least 3 characters.Alerts and Statuses
Section titled “Alerts and Statuses”Status colors must be consistent.
Green = normal, active, resolved, availableAmber = scheduled, advisory, pending, possible issueRed = urgent, active outage, blocked, failedGray = unknown, expired, inactiveBlue = informationalDo not flood the interface with red.
Use red only on the affected item or message.
Example:
Active outageScheduled interruptionResolvedMonitoringUnknownNotification Rule UI
Section titled “Notification Rule UI”This screen should be simple and hard to abuse.
Recommended fields:
Rule nameArea keywordNotification typeEnabled/disabledRecommended constraints:
Max notification rules per user: 3-5Max keywords per rule: 5-10Minimum keyword length: 3 charactersRate-limit create/update actionsRequire signed-in userRequire verified email if availableUI should explain that matching is based on text found in advisories.
Example helper text:
Bagiyo checks local advisories for words that match your saved area keywords.Use barangay names, road names, sitios, or nearby landmarks.Admin and Moderation UI
Section titled “Admin and Moderation UI”Admin screens should be plain and functional.
Admin users should be able to:
- View users
- View notification rules
- Disable suspicious rules
- Disable abusive users
- View recent activity
- Review failed notifications
Admin screens do not need decorative branding.
Prioritize tables, filters, search, and action clarity.
Mobile-First Rules
Section titled “Mobile-First Rules”Bagiyo will likely be used mostly on phones.
Design rules:
- Mobile first.
- Cards stack vertically on small screens.
- Tap targets must be large.
- Avoid dense tables on mobile.
- Use readable spacing.
- Avoid tiny badges.
- Avoid hover-only interactions.
- Make forms easy to complete with one hand.
Recommended breakpoints:
:root { --breakpoint-sm: 480px; --breakpoint-md: 768px; --breakpoint-lg: 1024px; --breakpoint-xl: 1280px;}Accessibility Rules
Section titled “Accessibility Rules”Minimum requirements:
- Sufficient color contrast.
- Keyboard navigable controls.
- Visible focus states.
- Semantic HTML.
- Proper labels for form fields.
- Buttons for actions, links for navigation.
- Do not rely only on color to communicate status.
- Respect
prefers-reduced-motion.
Focus style example:
:focus-visible { outline: 3px solid var(--color-primary); outline-offset: 3px;}Reduced motion:
@media (prefers-reduced-motion: reduce) { * { animation-duration: 0.001ms !important; animation-iteration-count: 1 !important; transition-duration: 0.001ms !important; scroll-behavior: auto !important; }}Motion
Section titled “Motion”Use minimal motion.
Allowed:
- Subtle button hover
- Gentle card hover
- Small loading transitions
- Drawer/menu slide
Avoid:
- Large animated backgrounds
- Constant moving fog
- Overanimated icons
- Motion that slows task completion
Motion should clarify interaction, not decorate the app.
Icon Style
Section titled “Icon Style”Use one icon set.
Recommended icon direction:
- Outline icons
- Rounded stroke
- Consistent stroke width
- Simple geometry
- No filled/outline mixing unless intentional
Icon examples:
Power outage: boltWeather: cloud/rainRoad: route/mapCommunity: message/megaphoneEmergency: phone/shieldSaved alerts: bellContent Tone
Section titled “Content Tone”Copy should be clear, local, and direct.
Good:
Get notified when your area appears in scheduled or live outage notices.Avoid:
Experience the next generation of hyperlocal civic intelligence.Use plain language.
Preferred tone:
- Helpful
- Direct
- Local
- Calm
- Human
Avoid:
- Hype
- Corporate language
- AI-sounding phrases
- Excessive marketing copy
Angular Implementation Notes
Section titled “Angular Implementation Notes”Recommended structure:
src/ app/ core/ auth/ layout/ theme/ shared/ components/ button/ card/ badge/ alert/ form-field/ features/ home/ tools/ notifications/ profile/ admin/ styles/ tokens.css base.css typography.css components.cssTheme handling:
- Store theme preference in localStorage.- Respect system preference initially.- Allow manual override.- Apply theme using data-theme on the document root.Example:
const savedTheme = localStorage.getItem('theme');
const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches;
const theme = savedTheme ?? (prefersDark ? 'dark' : 'light');
document.documentElement.setAttribute('data-theme', theme);Do not put theme logic inside random feature components.
Theme logic belongs in a shared/core theme service.
CSS Architecture
Section titled “CSS Architecture”Use global tokens and local component styles.
Recommended:
tokens.css - colors - spacing - radius - typography - shadows - z-index
base.css - html/body - reset - links - focus - accessibility
components.css or per-component styles - button - card - badge - alert - form controlsAvoid:
- Random hardcoded colors
- One-off spacing
- Duplicated button styles
- Component-specific theme overrides unless necessary
- Styling based on exact page location
Page Shell
Section titled “Page Shell”The page shell should include:
App headerMain content areaOptional footerSuggested structure:
<body> <app-root> <app-shell> <app-header /> <main> <router-outlet /> </main> <app-footer /> </app-shell> </app-root></body>Main content should have a consistent max width.
Example:
.page-container { width: min(100% - 2rem, 1120px); margin-inline: auto;}Design Acceptance Checklist
Section titled “Design Acceptance Checklist”Before merging UI work, check:
- Feels like a local Baguio/Benguet tool, not a tourism site.
- Uses pine/mountain/fog inspiration subtly.
- Does not look like a generic admin dashboard.
- Does not look like a government portal.
- Uses semantic CSS tokens.
- Works in light mode.
- Works in dark mode.
- No hardcoded component colors.
- Status colors are consistent.
Usability
Section titled “Usability”- Mobile-first layout works.
- Text is readable.
- Tap targets are large enough.
- Forms have visible labels.
- Empty/error/loading states exist.
Accessibility
Section titled “Accessibility”- Keyboard navigation works.
- Focus states are visible.
- Color contrast is acceptable.
- Status is not communicated by color alone.
- Reduced motion is respected.
Maintainability
Section titled “Maintainability”- Components are reusable.
- Styles use tokens.
- Theme logic is centralized.
- Feature-specific code does not leak into shared components.
Final Direction
Section titled “Final Direction”Bagiyo should look and feel like:
A calm mountain-city utility app for locals.
It should not be decorative first.
It should be useful first, then local, then beautiful.
Design priority:
1. Clarity2. Trust3. Local identity4. Speed5. Visual polish