Overview
CareerTruss runs its own ad system rather than embedding a third-party network. That choice is deliberate: no trackers follow students off the platform, every creative is reviewed by Site Superintendent, and relevance is decided by career track rather than by surveillance.
Placements
| Placement | Aspect | Where it appears |
|---|---|---|
| Rail portrait | 4:5 | Right rail on desktop — Dashboard, Opportunities, Applications, Saved |
| Inline landscape | 16:9 | Inside the internship detail page, between content blocks |
| Mobile inline | 4:5 | Below the main content under lg — so rail inventory is not lost on phones |
Recommended creative sizes are 600×750 for rail and1200×675 for inline. Uploads are capped at 2 MB and must be images.
Targeting
Resolve the viewer's track
The viewer's career track is derived from their preferred roles via the same role-to-track map the ranking engine uses.Filter by placement and page
Ads declare a placement and an optional target page. An ad with no target page is eligible everywhere its placement renders.Apply strict track gating
If an ad declares atarget_track, it renders only when the viewer's resolved track matches exactly. If the track cannot be resolved, every track-targeted ad is suppressed.Spotlight track matches
Track-matched ads take priority. Untargeted house ads fill the slot only when no track-matched ad is eligible, so a Biology campaign can never surface to a Technology student.
Fail closed, not open
Campaign fields
| Field | Purpose |
|---|---|
| title / body | Headline and one-line supporting copy |
| image_url | Creative — uploaded to a private bucket and served via a signed URL |
| cta_label / cta_url | Action. Internal paths route in-app; external links open out |
| sponsor_name | Attribution shown on the card |
| placement | rail or inline |
| target_page | dashboard, internships, internship_detail, applications, saved, or any |
| target_track | A career track, or empty for a house ad |
| priority | Tie-breaker among eligible ads |
| is_active / starts_at | Scheduling and kill switch |
Measurement
- Impressions and clicks increment through a single server function,
increment_ad_metric. - Click-through rate is computed in the admin table as clicks ÷ impressions.
- No cross-site identifiers, no third-party pixels, no behavioural profiles.
Creatives live in a private bucket
Tip