Files
tenderpilot/public/QUICK_REFERENCE.md
Peter Foster f969ecae04 feat: visual polish, nav login link, pricing badge fix, cursor fix, button contrast
- Hero mockup: enhanced 3D perspective and shadow
- Testimonials: illustrated SVG avatars
- Growth pricing card: visual prominence (scale, gradient, badge)
- Most Popular badge: repositioned to avoid overlapping heading
- Nav: added Log In link next to Start Free Trial
- Fixed btn-primary text colour on anchor tags (white on blue)
- Fixed cursor: default on all non-interactive elements
- Disabled user-select on non-form content to prevent text caret
2026-02-14 14:17:15 +00:00

4.2 KiB

TenderRadar Navigation System - Quick Reference

📋 File Locations

/auth.js                      - Shared auth utilities
/app.css                      - Shared app styles (27 KB)
/components/nav.js            - Navigation component
/components/footer.js         - Footer component

🚀 Minimal Setup (Copy & Paste)

Step 1: Add to HTML Head

<link rel="stylesheet" href="/app.css">
<script src="/auth.js"></script>

Step 2: Add to HTML Body (before closing tag)

<script src="/components/nav.js"></script>
<script src="/components/footer.js"></script>

Step 3: Protect Page (in your page script)

requireAuth(); // Redirects to login if not authenticated

Step 4: Make API Calls

// Instead of fetch():
const response = await fetchWithAuth('/api/tenders');
const data = await response.json();

🔐 Auth Functions (Quick Lookup)

Function Purpose Example
getToken() Get JWT const t = getToken();
setToken(t) Store JWT setToken(response.token);
clearToken() Remove JWT clearToken();
isAuthenticated() Check auth if (isAuthenticated()) {...}
getUserInfo() Get user data const u = getUserInfo(); u.email
requireAuth() Protect page requireAuth();
logout() Sign out logout();
fetchWithAuth(url) API with auth await fetchWithAuth('/api/...')

🎨 Most Used Component Classes

Buttons

<button class="btn btn-primary">Primary</button>
<button class="btn btn-secondary">Secondary</button>
<button class="btn btn-danger">Danger</button>
<button class="btn btn-lg">Large</button>
<button class="btn btn-block">Full Width</button>

Cards

<div class="card">
  <div class="card-header"><h2 class="card-title">Title</h2></div>
  <div class="card-content">Content</div>
  <div class="card-footer">Footer</div>
</div>

Badges & Tags

<span class="badge badge-success">Success</span>
<div class="tag">Label</div>

Alerts

<div class="alert alert-success">Success message</div>
<div class="alert alert-danger">Error message</div>

Forms

<div class="form-group">
  <label>Email</label>
  <input type="email" required>
</div>
<div class="form-row form-row-2">
  <div class="form-group"><label>First</label><input></div>
  <div class="form-group"><label>Last</label><input></div>
</div>

Tables

<div class="table-wrapper">
  <table>...</table>
</div>

Grids

<div class="grid grid-2">...</div>
<div class="grid grid-cols-3">...</div>

Loading

<div class="spinner"></div>
<div class="loading"><div class="spinner"></div>Loading...</div>

Empty State

<div class="empty-state">
  <div class="empty-state-icon">🗂️</div>
  <h3 class="empty-state-title">No items</h3>
  <p class="empty-state-desc">Description</p>
</div>

🎨 Colors

Name Value Use
Primary #1e40af (blue) Main actions, highlights
Accent #f59e0b (orange) Secondary actions
Success #10b981 (green) Positive feedback
Danger #ef4444 (red) Errors, destructive
Warning #f59e0b (orange) Warnings

📱 Responsive Breakpoints

  • Desktop: 1200px+ (full layout)
  • Tablet: 768px-1199px (optimized spacing)
  • Mobile: Below 768px (hamburger menu, single column)

Implementation Checklist

For each new page (dashboard, profile, alerts, etc.):

  • Load /auth.js in <head>
  • Load /app.css in <head>
  • Load /components/nav.js before </body>
  • Load /components/footer.js before </body>
  • Call requireAuth() in page script
  • Use fetchWithAuth() for API calls
  • Wrap content in <main class="app-container">

🔗 Navigation Structure

Authenticated Users:

  • Dashboard → /dashboard.html
  • Tenders → /tenders.html
  • Alerts → /alerts.html
  • Profile → /profile.html
  • [User Email] + Logout

Unauthenticated Users:

  • Login → /login.html
  • Sign Up → /signup.html

📚 Full Documentation

For complete details, see: /var/www/tenderradar/IMPLEMENTATION_GUIDE.md