0%
balqalam Logo
balqalam
FeaturesCommunityPricingDocumentation
Login
  • Introduction
  • Pitch
  • Hogwarts
  • Live Demo
  • MVP
  • Roadmap
  • Launch Sprint
  • PRD
  • Get Started
  • Localhost
  • Architecture
  • Structure
  • Pattern
  • Page
  • Layout
  • Content
  • Types
  • Config
  • Actions
  • Queries
  • Authorization
  • Validation
  • Form
  • Table
  • Detail
  • Card
  • Util
  • Hooks
  • List Params
  • Views
  • README.md
  • ISSUE.md
  • Technology Stack
  • Database
  • File
  • CDN Assets
  • Entry Points
  • Dashboard
  • Authentication
  • Credentials
  • OAuth
  • Flow Diagrams
  • Multi-Tenancy
  • Offline
  • Onboarding
  • Onboarding Videos
  • Add Values
  • Admission
  • Application
  • Attendance
  • Compliance
  • Profile
  • Exams
  • Exam Wizard
  • Timetable
  • Classrooms
  • Notifications
  • Conference
  • LMS (Lumos)
Finance
  • Finance
  • Fee Management
  • Invoice
  • Wallet
  • Salary
  • Payroll
  • Timesheet
  • Expenses
  • Budget
  • Receipt
  • Accounts
  • Banking
  • Reports
  • Dashboard
  • Permissions
  • Messages
  • Integration Flow
  • Provision
  • AI Document Processing
  • Document Intelligence
  • Internationalization
  • Translation
  • Translation Guide
  • Icons
  • Docs Factory
  • Inspiration
  • Listings
  • Teachers
  • Students
  • Catalog
  • Library
  • Contributing
  • Code of conduct
  • GitHub Workflow
  • Database Seeds
  • Database Safety
  • Test Accounts
  • Playwright
  • Prettier
  • Block Rebound
Sales & GTM
  • Marketing Brief
  • Sales
  • Go-to-market
  • Marketing
  • Admission — Feature Spotlight
  • Pilot Program
  • Leads
  • Proposal
  • Outreach Templates
  • Case Study
  • Competitors
  • Landing-page teardown
  • Competitor FAQ
  • Business model
  • Shared economy
  • Traction
Fundraising & Ecosystem
  • Get Support
  • Investor Deck
  • Data Room
  • Investors
  • Accelerators
  • Incubators
  • Grants
  • Sponsors
  • Partners
  • Competitions & Hackathons
  • Universities & Training Centers

CDN Assets

PreviousNext

Static assets served from S3 + CloudFront via the asset() helper, organized into 5 flat directories.

All platform UI assets live on S3 + CloudFront. Reference them through asset(); the helper prepends the CDN domain and the response is cached immutable for one year. 155 assets across 5 directories.

Infrastructure

ComponentValue
S3 buckethogwarts-databayt (us-east-1)
CloudFront CNAMEcdn.databayt.org (preferred)
CloudFront rawd1dlwtcfl0db67.cloudfront.net (still works — additive alias)
Cachepublic, max-age=31536000, immutable
Env varNEXT_PUBLIC_CDN_DOMAIN (build-time, set on Vercel)

Usage

import { asset } from "@/lib/asset-url"
 
<Image src={asset("/icons/logo.png")} />
<Image src={asset("/illustrations/attendance.png")} />
<img src={asset("/icons/visa.svg")} />
<source src={asset("/media/story.mp4")} />

asset("/icons/logo.png") → https://cdn.databayt.org/icons/logo.png.

Directory layout

DirectoryPurposeCount
icons/Small functional SVGs, logos, small PNGs42
illustrations/Art, decorative, complex88
animations/Lottie JSON3
photos/Real photographs22
media/Video and audio1
Total155

Five flat directories, no nesting.

Naming conventions

RuleExampleAnti-pattern
kebab-casedata-science.pngdataScience.png
Lowercasevisa.svgVisa.svg
No spaceshands-build.svgHands Build.svg
No prefixes by defaultvisa.svgpayment-visa.svg
Rename only on collisionsite-ball.pngPrefix everything

icons/ (42)

GroupKeys
Brandlogo.png, master-card.png, z.png
Anthropic UIgraduation-cap.svg, star-outline.svg, book-open.svg, anthropic-user.svg, users.svg, check-circle.svg, document.svg, news.svg
Paymentvisa.svg, mastercard.svg, amex.svg, apple-pay.svg, google-pay.svg, paypal.svg, mada.svg, stcpay.svg, fawry.svg
Exam typesmultiple-choice.svg, true-false.svg, short-answer.svg, essay.svg, fill-in-blank.svg, matching.svg, ordering.svg, multi-select.svg
Form attachmentsdegree.png, transcript.png, id.png, resume.png, files.png, image.png
Missionhands-build.svg, hands-stack.svg, objects-puzzle.svg
Sponsorsfaisal.png, mtdt.png, zain.png, khartoum.png, dal.png, 249.png, uok.png

illustrations/ (88)

GroupHighlights
Anthropic arthands-build.svg, hands-stack.svg, objects-puzzle.svg, category-01.svg … category-14.svg, claude-code-best-practices.svg, think-tool.svg, eng-long-running-agents.svg, anthropic-abstract.svg
Feature (32)student.png, teacher.png, fees.png, exam.png, assigment.png, attendance.png, gradebook.png, timetable.png, library.png, events.png, video.png, payroll.png, invoicing.png, wallet-3.png, credit-card.png, app-store.png, email.png, offer.png, canteen.png, parent.png, transport.png, headphone.png, notifications.png, calendar-2.png, id-cards.png, phone.png, messaging.png, graduate.png, blackboard.png, download.png, role-based.png, cover-letter.png, admission.png
Site artsite-ball.png, hat.png, glass.png, tent.png, teleport.png, community.png, champion.png, world.png, light-bulb.png, ball.png, robot.png, ai-fluency-hero.webp
Lumosteach.jpg, inspire.jpg, reward.jpg, generative-ai.png, it-certifications.png, data-science.png
Onboardingprivate.png, onboarding-public.png, international.png, techincal.png, espical.png, onboarding-step2.svg
GitHub achievementsstarstruck-detail.png, galaxy-brain-detail.png, pull-shark-detail.png, yolo-detail.png, pair-extraordinaire-detail.png, quickdraw-detail.png, public-sponsor-detail.png

Feature illustrations are used by feature-tabs.tsx and dream-section.tsx.

animations/ (3)

KeyUsed by
confetti.jsonsuccess modal, completion modal
anthropic-hero.jsonhero illustration
education.jsoneducation animation

photos/ (22)

GroupKeys
Contributorscontributors-h.jpeg, contributors-d.jpeg, contributor-1.jpg … contributor-6.jpg, mazin.jpg
Siteharry-potter.png, site-h.jpeg, trian.jpeg, site-a.jpeg, site-b.jpeg, map.jpeg
Facultydumbledore.jpeg, snape.jpeg, mcgonagall.jpeg, hagrid.jpeg
Housesgryffindor.jpeg, ravenclaw.jpeg, hupplepuff.jpeg, slytherin.jpg

media/ (1)

KeyUsed by
story.mp4story section, story video

Pre-existing CDN systems (do not touch)

SystemS3 prefixHelper
Catalog imagescatalog/subjects/{id}/thumbnail-{size}.webpgetCatalogImageUrl()
Video uploadslumos/{schoolId}/video/{timestamp}_{name}getCloudFrontUrl()
Subject fallbackspublic/subjects/ (local)image-map.ts

What stays in public/

ItemReason
service-worker.jsBrowser same-origin requirement
leaflet/ (3 files)Leaflet CSS hardcodes relative paths
logo.pngPWA manifest fallback
exams-main/ (666 PDFs)Arabic exam papers, local access
us-curriculum/ (1,023 images)Deferred
courses/ (57 PNGs)Deferred
books/ (20 images)Deferred
subjects/ (17 PNGs)Catalog pipeline fallback

Adding new assets

  1. Upload to the correct directory (icons/, illustrations/, photos/, animations/, media/).
  2. kebab-case, lowercase filenames.
  3. Set Content-Type and CacheControl: "public, max-age=31536000, immutable".
  4. Reference with asset("/category/filename.ext").

Or use the migration script.

pnpm tsx scripts/migrate-assets-to-s3.ts            # dry run
pnpm tsx scripts/migrate-assets-to-s3.ts --upload   # upload
pnpm tsx scripts/migrate-assets-to-s3.ts --manifest # output JSON manifest

Future

  • Move us-curriculum/, courses/, books/ to a content/ prefix in S3.
  • Multi-tenant branding at schools/{schoolId}/brand/.

See also

  • File
  • Multi-Tenancy
FileEntry Points

On This Page

InfrastructureUsageDirectory layoutNaming conventionsicons/ (42)illustrations/ (88)animations/ (3)photos/ (22)media/ (1)Pre-existing CDN systems (do not touch)What stays in public/Adding new assetsFutureSee also

Built by Databayt ·

Welcome to balqalam.

A great journey is about to begin.