One bucket, one domain, one helper — every databayt repo pulls the same assets from cdn.databayt.org.
We used to scatter assets across ImageKit (ik.imagekit.io/abdout) and Cloudinary, with each
product hot-linking its own ad-hoc URLs. That is over. There is now exactly one origin for
logos, icons, illustrations, animations, product media, and structured content. Every consumer
imports the same src/lib/cdn.ts, sets two env vars, and gets byte-identical URL behavior.
This is the authoritative reference for the URL scheme, the helper API, the showroom, and the migration off the legacy providers.
One table per top-level path (cdn.databayt.org/anthropic, /catalog, …), each row a small art
preview with its name and slug (provenance — filterable independently of the path). The full
set, nothing collapsed — the /icons showroom is the visual browser.
cdn.databayt.org/airbnb125 assets| # | Art | Name | Slug |
|---|---|---|---|
| 1 | air-conditioning.svg | airbnb | |
| 2 | allows-pets.svg | airbnb | |
| 3 | babysitter-recommendations.svg | airbnb | |
| 4 | backyard.svg | airbnb | |
| 5 | baking-sheet.svg | airbnb | |
| 6 | bathtub.svg | airbnb | |
| 7 | bbq-grill.svg | airbnb | |
| 8 | beach-essentials.svg | airbnb | |
| 9 | beachfront.svg | airbnb | |
| 10 | bed-linens.svg | airbnb | |
| 11 | bidet.svg | airbnb | |
| 12 | blender.svg | airbnb | |
| 13 | board-games.svg | airbnb | |
| 14 | body-soap.svg | airbnb | |
| 15 | books-and-reading-material.svg | airbnb | |
| 16 | breakfast.svg | airbnb | |
| 17 | carbon-monoxide-alarm.svg | airbnb | |
| 18 | ceiling-fan.svg | airbnb | |
| 19 | central-heating.svg | airbnb | |
| 20 | childrens-books-and-toys.svg | airbnb | |
| 21 | childrens-dinnerware.svg | airbnb | |
| 22 | city-skyline-view.svg | airbnb | |
| 23 | cleaning-available-during-stay.svg | airbnb | |
| 24 | cleaning-products.svg | airbnb | |
| 25 | close.svg | airbnb | |
| 26 | clothing-storage.svg | airbnb | |
| 27 | coffee-maker.svg | airbnb | |
| 28 | crib.svg | airbnb | |
| 29 | dedicated-workspace.svg | airbnb | |
| 30 | dining-table.svg | airbnb | |
| 31 | dishes-and-silverware.svg | airbnb | |
| 32 | dishwasher.svg | airbnb | |
| 33 | dryer.svg | airbnb | |
| 34 | elevator.svg | airbnb | |
| 35 | essentials.svg | airbnb | |
| 36 | ethernet-connection.svg | airbnb | |
| 37 | ev-charger.svg | airbnb | |
| 38 | WEBM | experiences-selected.webm | airbnb |
| 39 | WEBM | experiences-twirl-selected.webm | airbnb |
| 40 | ![]() | experiences.png | airbnb |
| 41 | WEBM | experiences.webm | airbnb |
| 42 | extra-pillows-and-blankets.svg | airbnb | |
| 43 | filters.svg | airbnb | |
| 44 | fire-extinguisher.svg | airbnb | |
| 45 | fire-pit.svg | airbnb | |
| 46 | first-aid-kit.svg | airbnb | |
| 47 | free-parking.svg | airbnb | |
| 48 | guest-favorite.svg | airbnb | |
| 49 | gym.svg | airbnb | |
| 50 | hair-dryer.svg | airbnb | |
| 51 | hammock.svg | airbnb | |
| 52 | hangers.svg | airbnb | |
| 53 | heating.svg | airbnb | |
| 54 | high-chair.svg | airbnb | |
| 55 | WEBM | homes-selected.webm | airbnb |
| 56 | WEBM | homes-twirl-selected.webm | airbnb |
| 57 | ![]() | homes.png | airbnb |
| 58 | WEBM | homes.webm | airbnb |
| 59 | host-greets-you.svg | airbnb | |
| 60 | hot-tub.svg | airbnb | |
| 61 | hot-water-kettle.svg | airbnb | |
| 62 | hot-water.svg | airbnb | |
| 63 | indoor-fireplace.svg | airbnb | |
| 64 | instant-book.svg | airbnb | |
| 65 | iron.svg | airbnb | |
| 66 | keypad.svg | airbnb | |
| 67 | king-bed.svg | airbnb | |
| 68 | kitchen.svg | airbnb | |
| 69 | laundromat-nearby.svg | airbnb | |
| 70 | life-size-games.svg | airbnb | |
| 71 | lock-on-bedroom-door.svg | airbnb | |
| 72 | logo.svg | airbnb | |
| 73 | long-term-stays.svg | airbnb | |
| 74 | luggage-dropoff.svg | airbnb | |
| 75 | luxe.svg | airbnb | |
| 76 | map-settings.svg | airbnb | |
| 77 | microwave.svg | airbnb | |
| 78 | mini-fridge.svg | airbnb | |
| 79 | CSS | motion.css | airbnb |
| 80 | movie-theater.svg | airbnb | |
| 81 | outdoor-furniture.svg | airbnb | |
| 82 | outdoor-shower.svg | airbnb | |
| 83 | oven.svg | airbnb | |
| 84 | paid-street-parking.svg | airbnb | |
| 85 | pocket-wifi.svg | airbnb | |
| 86 | pool.svg | airbnb | |
| 87 | portable-fans.svg | airbnb | |
| 88 | price.svg | airbnb | |
| 89 | private-entrance.svg | airbnb | |
| 90 | private-patio-or-balcony.svg | airbnb | |
| 91 | record-player.svg | airbnb | |
| 92 | refrigerator.svg | airbnb | |
| 93 | rice-maker.svg | airbnb | |
| 94 | room-darkening-shades.svg | airbnb | |
| 95 | safe.svg | airbnb | |
| 96 | sauna.svg | airbnb | |
| 97 | save.svg | airbnb | |
| 98 | search.svg | airbnb | |
| 99 | security-cameras.svg | airbnb | |
| 100 | self-check-in.svg | airbnb | |
| 101 | WEBM | services-selected.webm | airbnb |
| 102 | WEBM | services-twirl-selected.webm | airbnb |
| 103 | ![]() | services.png | airbnb |
| 104 | WEBM | services.webm | airbnb |
| 105 | shampoo.svg | airbnb | |
| 106 | share.svg | airbnb | |
| 107 | show-fullscreen-map.svg | airbnb | |
| 108 | show-map.svg | airbnb | |
| 109 | ski-in-ski-out.svg | airbnb | |
| 110 | smoke-alarm.svg | airbnb | |
| 111 | smoking-allowed.svg | airbnb | |
| 112 | sound-system.svg | airbnb | |
| 113 | star.svg | airbnb | |
| 114 | stove.svg | airbnb | |
| 115 | sun-loungers.svg | airbnb | |
| 116 | toaster.svg | airbnb | |
| 117 | travel-crib.svg | airbnb | |
| 118 | tv.svg | airbnb | |
| 119 | washer.svg | airbnb | |
| 120 | waterfront.svg | airbnb | |
| 121 | JSON | weekly-monthly-discount-2.json | airbnb |
| 122 | JSON | weekly-monthly-discount.json | airbnb |
| 123 | wifi.svg | airbnb | |
| 124 | window-guards.svg | airbnb | |
| 125 | wine-glasses.svg | airbnb |
cdn.databayt.org/anthropic205 assets| # | Art | Name | Slug |
|---|---|---|---|
| 1 | 67ed7b8d86b6d20bb1cd1292_Objects-Puzzle.svg | anthropic | |
| 2 | 67ed7bd686b6d20bb1cd568c_Hands-Build.svg | anthropic | |
| 3 | 67ed7bd72914c76f710d86fc_Hands-Stack.svg | anthropic | |
| 4 | 6903d22d0099a66d72e05699_33ddc751e21fb4b116b3f57dd553f0bc55ea09d1-1000x1000.svg | anthropic | |
| 5 | Abstract-Curves-01.svg | anthropic | |
| 6 | Abstract-Curves-02.svg | anthropic | |
| 7 | Abstract-Letter-01.svg | anthropic | |
| 8 | Abstract-Machinery-01.svg | anthropic | |
| 9 | Abstract-Organic.svg | anthropic | |
| 10 | advanced-tool-use.svg | anthropic | |
| 11 | agent-skills.svg | anthropic | |
| 12 | anthropic-wordmark.svg | anthropic | |
| 13 | api-vine.svg | anthropic | |
| 14 | JSON | api.json | anthropic |
| 15 | arrow-diagonal.svg | anthropic | |
| 16 | arrow-down.svg | anthropic | |
| 17 | arrow-right-line.svg | anthropic | |
| 18 | arrow-right.svg | anthropic | |
| 19 | arrow-up-right-small.svg | anthropic | |
| 20 | arrow-up.svg | anthropic | |
| 21 | bar-chart.svg | anthropic | |
| 22 | book-open.svg | anthropic | |
| 23 | build-with-claude.svg | anthropic | |
| 24 | building-effective-agents.svg | anthropic | |
| 25 | by-anthropic.svg | anthropic | |
| 26 | careers-hand-reflection.svg | anthropic | |
| 27 | careers-heart-hand.svg | anthropic | |
| 28 | careers-megaphone-hand.svg | anthropic | |
| 29 | caret-down.svg | anthropic | |
| 30 | caret-small.svg | anthropic | |
| 31 | category-01.svg | anthropic | |
| 32 | category-02.svg | anthropic | |
| 33 | category-03.svg | anthropic | |
| 34 | category-04.svg | anthropic | |
| 35 | category-05.svg | anthropic | |
| 36 | category-06.svg | anthropic | |
| 37 | category-07.svg | anthropic | |
| 38 | category-08.svg | anthropic | |
| 39 | category-09.svg | anthropic | |
| 40 | category-10.svg | anthropic | |
| 41 | category-11.svg | anthropic | |
| 42 | category-12.svg | anthropic | |
| 43 | category-13.svg | anthropic | |
| 44 | category-14.svg | anthropic | |
| 45 | chat-bubble.svg | anthropic | |
| 46 | check-circle.svg | anthropic | |
| 47 | chevron-down.svg | anthropic | |
| 48 | chevron-right.svg | anthropic | |
| 49 | claude-agent-sdk.svg | anthropic | |
| 50 | claude-code-best-practices.svg | anthropic | |
| 51 | claude-code-sandboxing.svg | anthropic | |
| 52 | ![]() | claude-excel.avif | anthropic |
| 53 | JSON | claude-for-excel.json | anthropic |
| 54 | claude-for-personal.svg | anthropic | |
| 55 | claude-for-work.svg | anthropic | |
| 56 | claude-sparkle.svg | anthropic | |
| 57 | claude-wordmark.svg | anthropic | |
| 58 | close.svg | anthropic | |
| 59 | code-brackets.svg | anthropic | |
| 60 | code-execution-mcp.svg | anthropic | |
| 61 | code-magnifier.svg | anthropic | |
| 62 | context-engineering.svg | anthropic | |
| 63 | contextual-retrieval.svg | anthropic | |
| 64 | cookbook.svg | anthropic | |
| 65 | copy.svg | anthropic | |
| 66 | cowork-toast.svg | anthropic | |
| 67 | curly-braces.svg | anthropic | |
| 68 | desktop-extensions.svg | anthropic | |
| 69 | document.svg | anthropic | |
| 70 | download.svg | anthropic | |
| 71 | dual-chat.svg | anthropic | |
| 72 | economic-futures.svg | anthropic | |
| 73 | eng-advanced-tool-use.svg | anthropic | |
| 74 | eng-agent-sdk.svg | anthropic | |
| 75 | eng-agent-skills.svg | anthropic | |
| 76 | eng-ai-resistant-evals.svg | anthropic | |
| 77 | eng-best-practices.svg | anthropic | |
| 78 | eng-building-effective-agents.svg | anthropic | |
| 79 | eng-c-compiler.svg | anthropic | |
| 80 | eng-claude-code-sandboxing.svg | anthropic | |
| 81 | eng-code-execution-mcp.svg | anthropic | |
| 82 | eng-context-engineering.svg | anthropic | |
| 83 | eng-demystifying-evals.svg | anthropic | |
| 84 | eng-desktop-extensions.svg | anthropic | |
| 85 | eng-harnesses-long-running-agents.svg | anthropic | |
| 86 | eng-infra-noise.svg | anthropic | |
| 87 | eng-long-running-agents.svg | anthropic | |
| 88 | eng-swe-bench.svg | anthropic | |
| 89 | eng-think-tool.svg | anthropic | |
| 90 | eng-tools-for-agents.svg | anthropic | |
| 91 | external-link.svg | anthropic | |
| 92 | ![]() | f1664b95be4e2e828a180cf9f015a0b6f8365472-5760x3240.png | anthropic |
| 93 | filter.svg | anthropic | |
| 94 | globe.svg | anthropic | |
| 95 | graduation-cap.svg | anthropic | |
| 96 | grid.svg | anthropic | |
| 97 | hamburger-menu.svg | anthropic | |
| 98 | hand-abacus.svg | anthropic | |
| 99 | hand-head-node.svg | anthropic | |
| 100 | hand-node-pair.svg | anthropic | |
| 101 | Hands-Abstract-01.svg | anthropic | |
| 102 | Hands-Abstract-Complex-01.svg | anthropic | |
| 103 | hands-build.svg | anthropic | |
| 104 | Hands-Build.svg | anthropic | |
| 105 | Hands-Circular.svg | anthropic | |
| 106 | Hands-Complex-01.svg | anthropic | |
| 107 | Hands-Document-02.svg | anthropic | |
| 108 | Hands-Document.svg | anthropic | |
| 109 | Hands-Figure-01.svg | anthropic | |
| 110 | Hands-Figure-02.svg | anthropic | |
| 111 | Hands-Gesture-01.svg | anthropic | |
| 112 | Hands-Gesture-02.svg | anthropic | |
| 113 | Hands-Gesture-04.svg | anthropic | |
| 114 | Hands-Gesture-05.svg | anthropic | |
| 115 | Hands-Gesture-Background-01.svg | anthropic | |
| 116 | Hands-Interaction.svg | anthropic | |
| 117 | hands-stack.svg | anthropic | |
| 118 | Hands-Stack.svg | anthropic | |
| 119 | Hands-Terrain-02.svg | anthropic | |
| 120 | Hands-Terrain.svg | anthropic | |
| 121 | help-circle.svg | anthropic | |
| 122 | JSON | hero.json | anthropic |
| 123 | hourglass.svg | anthropic | |
| 124 | ![]() | img_1.png | anthropic |
| 125 | ![]() | img_2.png | anthropic |
| 126 | ![]() | img_3.png | anthropic |
| 127 | ![]() | img_4.png | anthropic |
| 128 | ![]() | img.png | anthropic |
| 129 | Letter-Abstract-01.svg | anthropic | |
| 130 | Letter-Abstract-02.svg | anthropic | |
| 131 | Letter-E-01.svg | anthropic | |
| 132 | Letter-M-01.svg | anthropic | |
| 133 | Letter-M-02.svg | anthropic | |
| 134 | Letter-P-01.svg | anthropic | |
| 135 | Letter-W-Figure.svg | anthropic | |
| 136 | Letter-W-Person-01.svg | anthropic | |
| 137 | lightning-outline.svg | anthropic | |
| 138 | lightning.svg | anthropic | |
| 139 | list.svg | anthropic | |
| 140 | long-running-agents.svg | anthropic | |
| 141 | marginalia-media.svg | anthropic | |
| 142 | ![]() | mcp-diagram.png | anthropic |
| 143 | mcp-logo-dark.svg | anthropic | |
| 144 | mcp-logo-light.svg | anthropic | |
| 145 | mcp-logo-mintlify-dark.svg | anthropic | |
| 146 | mcp-logo-mintlify-light.svg | anthropic | |
| 147 | menu.svg | anthropic | |
| 148 | monitor.svg | anthropic | |
| 149 | more-horizontal.svg | anthropic | |
| 150 | more-vertical.svg | anthropic | |
| 151 | news-extended-thinking.svg | anthropic | |
| 152 | news.svg | anthropic | |
| 153 | no-ads-toast.svg | anthropic | |
| 154 | node-branch.svg | anthropic | |
| 155 | node-constellation.svg | anthropic | |
| 156 | node-constitution.svg | anthropic | |
| 157 | Objects-Document-02.svg | anthropic | |
| 158 | Objects-Document-Layout-01.svg | anthropic | |
| 159 | objects-puzzle.svg | anthropic | |
| 160 | Objects-Puzzle.svg | anthropic | |
| 161 | onboarding-step2.svg | anthropic | |
| 162 | pencil.svg | anthropic | |
| 163 | People-Figure-02.svg | anthropic | |
| 164 | People-Figure-03.svg | anthropic | |
| 165 | People-Figure-04.svg | anthropic | |
| 166 | People-Motion-01.svg | anthropic | |
| 167 | People-Multiple-01.svg | anthropic | |
| 168 | pictogram-heart.svg | anthropic | |
| 169 | pictogram-shield.svg | anthropic | |
| 170 | play-filled.svg | anthropic | |
| 171 | play-outline.svg | anthropic | |
| 172 | play.svg | anthropic | |
| 173 | research-coding-skills.svg | anthropic | |
| 174 | route.svg | anthropic | |
| 175 | Scene-Complex-01.svg | anthropic | |
| 176 | Scene-Complex-02.svg | anthropic | |
| 177 | Scene-Complex-03.svg | anthropic | |
| 178 | Scene-Complex-04.svg | anthropic | |
| 179 | Scene-Complex-05.svg | anthropic | |
| 180 | Scene-Detailed-01.svg | anthropic | |
| 181 | Scene-Detailed-02.svg | anthropic | |
| 182 | Scene-Organic-01.svg | anthropic | |
| 183 | Scene-Terrain.svg | anthropic | |
| 184 | Scene-Wavy-01.svg | anthropic | |
| 185 | Scene-Wide-01.svg | anthropic | |
| 186 | Scene-Wide-Orange-01.svg | anthropic | |
| 187 | ![]() | Screenshot 2025-12-03 at 6.52.28 PM.png | anthropic |
| 188 | search-large.svg | anthropic | |
| 189 | search.svg | anthropic | |
| 190 | settings.svg | anthropic | |
| 191 | sidebar.svg | anthropic | |
| 192 | star-outline.svg | anthropic | |
| 193 | starburst.svg | anthropic | |
| 194 | stream-community.svg | anthropic | |
| 195 | stream-curated-courses.svg | anthropic | |
| 196 | stream-interactive-learning.svg | anthropic | |
| 197 | stream-progress-tracking.svg | anthropic | |
| 198 | swe-bench.svg | anthropic | |
| 199 | terminal-prompt.svg | anthropic | |
| 200 | terminal.svg | anthropic | |
| 201 | think-tool.svg | anthropic | |
| 202 | transparency.svg | anthropic | |
| 203 | user.svg | anthropic | |
| 204 | users.svg | anthropic | |
| 205 | wordmark.svg | anthropic |
cdn.databayt.org/clickview1080 assetscdn.databayt.org/fill40 assetscdn.databayt.org/hogwarts780 assets| # | Art | Name | Slug |
|---|---|---|---|
| 1 | ![]() | 249.png | hogwarts |
| 2 | ![]() | account.png | hogwarts |
| 3 | ![]() | ai-fluency-hero.webp | hogwarts |
| 4 | amex.svg | hogwarts | |
| 5 | JSON | anthropic-hero.json | hogwarts |
| 6 | JSON | confetti.json | hogwarts |
| 7 | JSON | education.json | hogwarts |
| 8 | JSON | hand-lock.json | hogwarts |
| 9 | ![]() | app-store.png | hogwarts |
| 10 | apple-pay.svg | hogwarts | |
| 11 | ![]() | assigment.png | hogwarts |
| 12 | ![]() | attendance.png | hogwarts |
| 13 | ![]() | b.png | hogwarts |
| 14 | ![]() | ball.png | hogwarts |
| 15 | ![]() | blackboard.png | hogwarts |
| 16 | book-open.svg | hogwarts | |
| 17 | ![]() | 0a79dd7d98d41d8142fb2a91a62cce4a.jpg | hogwarts |
| 18 | ![]() | 103603cfb9681d280af6cef1de9cb7bb.jpg | hogwarts |
| 19 | ![]() | 2dbbc97da4229971ba10ccdb32712f73.jpg | hogwarts |
| 20 | ![]() | 32b3b877c1ab6409a4a3b875ee58fc08.jpg | hogwarts |
| 21 | ![]() | 41c30b15b7f676d52f8020aa120dfb7e.jpg | hogwarts |
| 22 | ![]() | 48f35f8ab6b6b4009f61339be9c8e9c6.jpg | hogwarts |
| 23 | ![]() | 570d65c65532c26332a28ae97db2d2df.jpg | hogwarts |
| 24 | ![]() | 7cdd014798d2d468d99186d0364ea92d.jpg | hogwarts |
| 25 | ![]() | 844484620297c416c8ba4315ef4f1ce7.jpg | hogwarts |
| 26 | ![]() | 9780747542155-us.jpg | hogwarts |
| 27 | ![]() | ad19c1392245f71cf08dd1984d2cf52f.jpg | hogwarts |
| 28 | ![]() | c6712c2ab42864525943dc62ae4673be.jpg | hogwarts |
| 29 | ![]() | d1ed3d0107fe67e9af8bd48939c2fc9b.jpg | hogwarts |
| 30 | ![]() | fe390c8f19b4fc2dcde43ec0eb709e56.jpg | hogwarts |
| 31 | ![]() | fe92f5f91c7b4351624bcebf19a5937c.jpg | hogwarts |
| 32 | ![]() | goblet of fire.png | hogwarts |
| 33 | ![]() | half-blood prince.png | hogwarts |
| 34 | ![]() | order of the Phoenix.jpg | hogwarts |
| 35 | ![]() | philosopher's stone.jpg | hogwarts |
| 36 | ![]() | prisoner of azkaban.jpg | hogwarts |
| 37 | ![]() | calendar-2.png | hogwarts |
| 38 | ![]() | calendar.png | hogwarts |
| 39 | ![]() | cam-recorder.png | hogwarts |
| 40 | ![]() | canteen.png | hogwarts |
| 41 | category-01.svg | hogwarts | |
| 42 | category-03.svg | hogwarts | |
| 43 | category-06.svg | hogwarts | |
| 44 | category-08.svg | hogwarts | |
| 45 | ![]() | champion.png | hogwarts |
| 46 | check-circle.svg | hogwarts | |
| 47 | claude-code-best-practices.svg | hogwarts | |
| 48 | ![]() | community.png | hogwarts |
| 49 | ![]() | contributor-1.jpg | hogwarts |
| 50 | ![]() | contributor-2.jpg | hogwarts |
| 51 | ![]() | contributor-3.jpg | hogwarts |
| 52 | ![]() | contributor-5.jpg | hogwarts |
| 53 | ![]() | contributor-6.jpg | hogwarts |
| 54 | ![]() | 1.jpg | hogwarts |
| 55 | ![]() | 2.jpg | hogwarts |
| 56 | ![]() | 3.jpg | hogwarts |
| 57 | ![]() | 4.png | hogwarts |
| 58 | ![]() | 5.jpg | hogwarts |
| 59 | ![]() | 6.jpg | hogwarts |
| 60 | ![]() | a.jpg | hogwarts |
| 61 | ![]() | aa.jpeg | hogwarts |
| 62 | ![]() | abdout.jpg | hogwarts |
| 63 | ![]() | c.jpeg | hogwarts |
| 64 | ![]() | d.jpeg | hogwarts |
| 65 | ![]() | elliot.png | hogwarts |
| 66 | ![]() | h.jpeg | hogwarts |
| 67 | ![]() | hassan.webp | hogwarts |
| 68 | ![]() | mazin.jpg | hogwarts |
| 69 | ![]() | p.jpeg | hogwarts |
| 70 | ![]() | s.jpeg | hogwarts |
| 71 | ![]() | sedon.png | hogwarts |
| 72 | ![]() | v.jpeg | hogwarts |
| 73 | ![]() | z.jpeg | hogwarts |
| 74 | ![]() | cover-letter.png | hogwarts |
| 75 | ![]() | credit-card.png | hogwarts |
| 76 | ![]() | dal.png | hogwarts |
| 77 | ![]() | new-harry-old-harry.webp | hogwarts |
| 78 | ![]() | original-1a00c7216684c0c1694324aeebf79fcd.webp | hogwarts |
| 79 | ![]() | original-20384902f5cdadf5c3c2582661354d9a.webp | hogwarts |
| 80 | ![]() | original-2373c6ffda64e8fa11501912ada8f76c.webp | hogwarts |
| 81 | ![]() | original-6f8f8f4e06bde605454b7db11f01d092.webp | hogwarts |
| 82 | ![]() | original-7a781b9883c02060e07856f36f38e549.webp | hogwarts |
| 83 | ![]() | original-7aaba702df6d2bcb27074831c18b1553.webp | hogwarts |
| 84 | ![]() | original-e2870003446991717ec91a45410323db.webp | hogwarts |
| 85 | ![]() | original-e6754e319cde71d1495dde8e4f1a7555.webp | hogwarts |
| 86 | ![]() | data-science.png | hogwarts |
| 87 | ![]() | database.png | hogwarts |
| 88 | ![]() | degree.png | hogwarts |
| 89 | document.svg | hogwarts | |
| 90 | ![]() | download.png | hogwarts |
| 91 | ![]() | dumbledore.jpeg | hogwarts |
| 92 | ![]() | email.png | hogwarts |
| 93 | ![]() | espical.png | hogwarts |
| 94 | essay.svg | hogwarts | |
| 95 | ![]() | events.png | hogwarts |
| 96 | ![]() | exam.png | hogwarts |
| 97 | ![]() | faisal.png | hogwarts |
| 98 | fawry.svg | hogwarts | |
| 99 | ![]() | accounting.png | hogwarts |
| 100 | ![]() | admission.png | hogwarts |
| 101 | ![]() | events.png | hogwarts |
| 102 | ![]() | library.png | hogwarts |
| 103 | ![]() | lms.png | hogwarts |
| 104 | ![]() | transport.png | hogwarts |
| 105 | ![]() | fees.png | hogwarts |
| 106 | ![]() | files.png | hogwarts |
| 107 | fill-in-blank.svg | hogwarts | |
| 108 | ![]() | folder.png | hogwarts |
| 109 | ![]() | stage1-frame-01.png | hogwarts |
| 110 | ![]() | stage1-frame-02.png | hogwarts |
| 111 | ![]() | stage1-frame-03.png | hogwarts |
| 112 | ![]() | stage1-frame-04.png | hogwarts |
| 113 | ![]() | stage2-frame-01.png | hogwarts |
| 114 | ![]() | stage2-frame-02.png | hogwarts |
| 115 | ![]() | stage2-frame-03.png | hogwarts |
| 116 | ![]() | stage2-frame-04.png | hogwarts |
| 117 | ![]() | stage3-frame-01.png | hogwarts |
| 118 | ![]() | stage3-frame-02.png | hogwarts |
| 119 | ![]() | stage3-frame-03.png | hogwarts |
| 120 | ![]() | stage3-frame-04.png | hogwarts |
| 121 | ![]() | stage3-frame-05.png | hogwarts |
| 122 | ![]() | galaxy-brain-detail.png | hogwarts |
| 123 | ![]() | generative-ai.png | hogwarts |
| 124 | ![]() | galaxy-brain-bronze.png | hogwarts |
| 125 | ![]() | galaxy-brain-detail.png | hogwarts |
| 126 | ![]() | galaxy-brain-gold.png | hogwarts |
| 127 | ![]() | galaxy-brain-silver.png | hogwarts |
| 128 | ![]() | galaxy-brain.png | hogwarts |
| 129 | ![]() | pair-extraordinaire-bronze.png | hogwarts |
| 130 | ![]() | pair-extraordinaire-detail.png | hogwarts |
| 131 | ![]() | pair-extraordinaire-gold.png | hogwarts |
| 132 | ![]() | pair-extraordinaire-silver.png | hogwarts |
| 133 | ![]() | pair-extraordinaire.png | hogwarts |
| 134 | ![]() | public-sponsor-detail.png | hogwarts |
| 135 | ![]() | public-sponsor.png | hogwarts |
| 136 | ![]() | pull-shark-bronze.png | hogwarts |
| 137 | ![]() | pull-shark-detail.png | hogwarts |
| 138 | ![]() | pull-shark-gold.png | hogwarts |
| 139 | ![]() | pull-shark-silver.png | hogwarts |
| 140 | ![]() | pull-shark.png | hogwarts |
| 141 | ![]() | quickdraw-detail.png | hogwarts |
| 142 | ![]() | quickdraw.png | hogwarts |
| 143 | ![]() | starstruck-bronze.png | hogwarts |
| 144 | ![]() | starstruck-detail.png | hogwarts |
| 145 | ![]() | starstruck-gold.png | hogwarts |
| 146 | ![]() | starstruck-silver.png | hogwarts |
| 147 | ![]() | starstruck.png | hogwarts |
| 148 | ![]() | yolo-detail.png | hogwarts |
| 149 | ![]() | yolo.png | hogwarts |
| 150 | ![]() | glass.png | hogwarts |
| 151 | google-pay.svg | hogwarts | |
| 152 | ![]() | gradebook.png | hogwarts |
| 153 | ![]() | graduate.png | hogwarts |
| 154 | graduation-cap.svg | hogwarts | |
| 155 | ![]() | gryffindor.jpeg | hogwarts |
| 156 | ![]() | hagrid.jpeg | hogwarts |
| 157 | ![]() | harry-potter.jpeg | hogwarts |
| 158 | ![]() | harry-potter.png | hogwarts |
| 159 | ![]() | hat.png | hogwarts |
| 160 | ![]() | headphone.png | hogwarts |
| 161 | ![]() | hupplepuff.jpeg | hogwarts |
| 162 | 036c01a9e427ea0f4d1e6c7221e4f6dce2259bf7-1000x1000.svg | hogwarts | |
| 163 | 07c019d3b2596ff9d1a70c4af1efd00b0a775510-1000x1000.svg | hogwarts | |
| 164 | 0d259ed89e181ad18dea036804f50080ea61e77a-1680x1260.svg | hogwarts | |
| 165 | 0df729ce74e4c9dd62c3342c9549ce6c7cef1202-1000x1000.svg | hogwarts | |
| 166 | 1576ae23eaf481f33bd36ab468171cc69d12361a-1000x1000.svg | hogwarts | |
| 167 | 1c3d1af62032009538b8bf5864139ca124b06741-1000x1000.svg | hogwarts | |
| 168 | 1c3e87fd90491089b2971dc34f9f75bb8a80f713-1000x1000.svg | hogwarts | |
| 169 | 2174acb37a84767550abfe2588eb5648f941a897-1000x1000.svg | hogwarts | |
| 170 | 33dbe8f783d4835a838b4c4ae85d3c04e352fee1-1000x1000.svg | hogwarts | |
| 171 | 33ddc751e21fb4b116b3f57dd553f0bc55ea09d1-1000x1000.svg | hogwarts | |
| 172 | 39c40393e610cc0a5e65f50ad12ff5ada273f792-1000x1000.svg | hogwarts | |
| 173 | 39db33950eb113e504a5b9fc56db490a64673e96-1000x1000.svg | hogwarts | |
| 174 | 423062049d4676b41d52b16068cbb5e21603190e-1000x1000.svg | hogwarts | |
| 175 | 46e4aa7ea208ed440d5bd9e9e3a0ee66bc336ff1-1000x1000.svg | hogwarts | |
| 176 | 4d663bd87c391c144b9bca513b3849ccfa00a3b9-1000x1000.svg | hogwarts | |
| 177 | 5f455d24ea80569b34eb4347f06152d8a5508722-1000x1000.svg | hogwarts | |
| 178 | 6457c34fbcb012acf0f27f15a6006f700d0f50de-1000x1000.svg | hogwarts | |
| 179 | 6507d83d1197bb8630131d363fb8bea838d79ca7-1000x1000.svg | hogwarts | |
| 180 | 653e7474811cf768b6b0f628e253f98c60e2747e-1000x1000.svg | hogwarts | |
| 181 | 6905c83d0735e1bc430025fdd1748d1406079036-1000x1000.svg | hogwarts | |
| 182 | 6b1470e7fa2fb7280502291f204b88c412690076-1000x1000.svg | hogwarts | |
| 183 | 6e00dbffcddc82df5e471c43453abfc74ca94e8d-1000x1000.svg | hogwarts | |
| 184 | 74409af25137110ac04cc39e4d5ea0a2fbcea421-1000x1000.svg | hogwarts | |
| 185 | 77dd9077412abc790bf2bc6fa3383b37724d6305-1000x1000.svg | hogwarts | |
| 186 | 811dcfbdaac4ea3628e0a2a5a547b0a175d63bcf-1000x1000.svg | hogwarts | |
| 187 | 84dfc3a6a5b8bf79a0cd430524c1f5a89e376531-1681x1261.svg | hogwarts | |
| 188 | 8925ac952fa2cb8eb5e845b2e44f3e71b33fd695-1000x1000.svg | hogwarts | |
| 189 | 8d339ae8ecedecc1409db8f5bbb99c958db56946-1000x1000.svg | hogwarts | |
| 190 | 92f0be286703b4b8c906bcf1c95c7f3bbee5bd38-1000x1000.svg | hogwarts | |
| 191 | 97cf99624aa60f59b75f9e08cdf0f00d33c34804-1000x1000.svg | hogwarts | |
| 192 | 9a2bdeafe0f8f92dcc062ba47cc0a1014c4ecbc0-1000x1000.svg | hogwarts | |
| 193 | 9f6a378a1e3592cf8d27447457409ba12284faef-1000x1000.svg | hogwarts | |
| 194 | a62b6eb169818f14c35b7a192af269e283f8fa93-1000x1000.svg | hogwarts | |
| 195 | a683fdcfe3e2c7c6532342a0fa4ff789c3fd4852-1000x1000.svg | hogwarts | |
| 196 | a97733b3607b54a30778eb89de08afd9e02b9fb3-1000x1000.svg | hogwarts | |
| 197 | abc884c723daea810d2e986455358281a2f94102-1000x1000.svg | hogwarts | |
| 198 | b1ce510c468b2920d4f8f61c17a50906801f939a-1000x1000.svg | hogwarts | |
| 199 | b5c98d26c46edc43193e7f7e28a00633a538bb9c-1000x1000.svg | hogwarts | |
| 200 | b68cbb43d7c8f56f0b14cc867e8d4d74445f78b0-1000x1000.svg | hogwarts | |
| 201 | c0af2a56f56cf298ce5904f2901e9a36facd0dbe-1000x1000.svg | hogwarts | |
| 202 | c1ef4c0b6882dfe985555b52999d370ea88a3c50-1000x1000.svg | hogwarts | |
| 203 | c4a48972044d45df475f1dd84df3b74d221b6580-1000x1000.svg | hogwarts | |
| 204 | cd4fd51deacd067d4e30aee4f4b149f6cba1b97b-1000x1000.svg | hogwarts | |
| 205 | cd9cf56a7f049285b7c1c8786c0a600cf3d7f317-1000x1000.svg | hogwarts | |
| 206 | d3dd09ad16c68461dc3fb01df5e84cf7ccafda6c-1000x1000.svg | hogwarts | |
| 207 | ddad92700787ec1bf1d80359c0c5e6ca305682b0-1000x1000.svg | hogwarts | |
| 208 | ee580919acaba2ddc07425f7a7390c8962cadc94-1000x1000.svg | hogwarts | |
| 209 | f1d1a4c75433996f97b87ea0f3791022370e2765-1680x1260.svg | hogwarts | |
| 210 | 249.png | hogwarts | |
| 211 | 5596deec-5404-4c79-b5e0-9aa7b67f35cb.png | hogwarts | |
| 212 | 67d31dd7aa394792257596c5_webclip.png | hogwarts | |
| 213 | 67d3c039bc939998a7c43b37_work-with-anthropic-p-1080.webp | hogwarts | |
| 214 | 67d3c039bc939998a7c43b37_work-with-anthropic-p-500.webp | hogwarts | |
| 215 | 67d3c039bc939998a7c43b37_work-with-anthropic-p-800.webp | hogwarts | |
| 216 | 67d3c039bc939998a7c43b37_work-with-anthropic.webp | hogwarts | |
| 217 | 67ed7b8d86b6d20bb1cd1292_Objects-Puzzle.svg | hogwarts | |
| 218 | 67ed7bd686b6d20bb1cd568c_Hands-Build.svg | hogwarts | |
| 219 | 67ed7bd72914c76f710d86fc_Hands-Stack.svg | hogwarts | |
| 220 | 681d52619fec35886a7f1a70_favicon.png | hogwarts | |
| 221 | 681d62091e3b46dac5428888_research-p-1080.webp | hogwarts | |
| 222 | 681d62091e3b46dac5428888_research-p-500.webp | hogwarts | |
| 223 | 681d62091e3b46dac5428888_research-p-800.webp | hogwarts | |
| 224 | 681d62091e3b46dac5428888_research.webp | hogwarts | |
| 225 | 681d62094dad1585c366d2da_product-p-1080.webp | hogwarts | |
| 226 | 681d62094dad1585c366d2da_product-p-500.webp | hogwarts | |
| 227 | 681d62094dad1585c366d2da_product-p-800.webp | hogwarts | |
| 228 | 681d62094dad1585c366d2da_product.webp | hogwarts | |
| 229 | 681d620978e48d8861871f7d_policy-p-1080.webp | hogwarts | |
| 230 | 681d620978e48d8861871f7d_policy-p-500.webp | hogwarts | |
| 231 | 681d620978e48d8861871f7d_policy-p-800.webp | hogwarts | |
| 232 | 681d620978e48d8861871f7d_policy.webp | hogwarts | |
| 233 | 68309ab48369f7ad9b4a40e1_open-graph.jpg | hogwarts | |
| 234 | 689f4a9aff1f63fde75cf733_favicon.png | hogwarts | |
| 235 | 68b5a7ba07d03afe57aaaf02_asana_light.svg | hogwarts | |
| 236 | 68b5a7be22750d186de0e365_asana_dark.svg | hogwarts | |
| 237 | 68b5a7e33062ccf9eb34ffc2_Aws_light.svg | hogwarts | |
| 238 | 68b5a7e72c5c0a63b1d2c4b2_Aws_dark.svg | hogwarts | |
| 239 | 68b5a82113a0ba4b84c6e06d_Anthropic_dark.svg | hogwarts | |
| 240 | 68b5a825ca6a91f3ebdafad5_Anthropic_light.svg | hogwarts | |
| 241 | 68b5a84a22074cc407a84848_Atlassian_light.svg | hogwarts | |
| 242 | 68b5a90d44ca47ee86ccfc89_Brex_light.svg | hogwarts | |
| 243 | 68b5a911c1ea299a1a76a40c_Brex_dark.svg | hogwarts | |
| 244 | 68b5a9fe3bc17a074ec60fcc_Cred_dark.svg | hogwarts | |
| 245 | 68b5aa033a51804859837fa9_Cred_light.svg | hogwarts | |
| 246 | 68b5aa27a195c4190413c57a_databrick_dark.svg | hogwarts | |
| 247 | 68b5aa2faa897b0e63d332ef_databrick_light.svg | hogwarts | |
| 248 | 68b5aabef4062d2b887afbad_Figma_dark.svg | hogwarts | |
| 249 | 68b5aac4c452118ce3006cb8_Figma_light.svg | hogwarts | |
| 250 | 68b5aaebe118de085a232f53_GitLab_dark.svg | hogwarts | |
| 251 | 68b5aaf1b161d57cbe7095b8_GitLab_light.svg | hogwarts | |
| 252 | 68b5ab481a800b9e0c386290_Intercom_dark.svg | hogwarts | |
| 253 | 68b5ab502bc6f647706fcb9f_Intercom_light.svg | hogwarts | |
| 254 | 68b5ac59acb8170797d48950_Pagerduty_dark.svg | hogwarts | |
| 255 | 68b5ac5e2edc550c36ff4eff_Pagerduty_light.svg | hogwarts | |
| 256 | 68b5ad129d3cb836048d2f6b_Plaid_dark.svg | hogwarts | |
| 257 | 68b5ad18cefcc0f38fff4e04_Plaid_light.svg | hogwarts | |
| 258 | 68b5ad62e2f100f80635f7a7_Ramp_dark.svg | hogwarts | |
| 259 | 68b5ad6788c7a1b711a85623_Ramp_light.svg | hogwarts | |
| 260 | 68b5adf8d23ff734739d3a80_Stripe_light.svg | hogwarts | |
| 261 | 68b5adfff1546febae66f812_Stripe_dark.svg | hogwarts | |
| 262 | 68b5ae0ce20f30193a817bb3_Stubhub_dark.svg | hogwarts | |
| 263 | 68b5ae12c8fde8379f187f2b_Stubhub_light.svg | hogwarts | |
| 264 | 68b5ae58a9b3ff9512c20db4_Vercel_dark.svg | hogwarts | |
| 265 | 68b5ae5cc28a7f003e87512b_Vercel_light.svg | hogwarts | |
| 266 | 68b5aec429fd5cfaec6ed70f_Workato_light.svg | hogwarts | |
| 267 | 68b5aec9cf7ecec1a554a600_Workato_dark.svg | hogwarts | |
| 268 | 68b5aed89af0a9a659d820f0_zapier_dark.svg | hogwarts | |
| 269 | 68b5aedd1d4ccaa7aaecee72_zapier_light.svg | hogwarts | |
| 270 | 68ba1577e91d8296653388ca_Group%202055245285.svg | hogwarts | |
| 271 | 68ba157c0117254341bed811_Group%202055245285-1.svg | hogwarts | |
| 272 | 68ba179c1c4432fa78b2f126_Frame-1.svg | hogwarts | |
| 273 | 68ba17a186e44af7d97dae57_Frame.svg | hogwarts | |
| 274 | 68bf57518a91cc645d08ae1a_sentry-light-mode.svg | hogwarts | |
| 275 | 68bf57579ec56ad383059291_sentry-dark-mode.svg | hogwarts | |
| 276 | 68c0da683cc4d0737a03edd9_cs-logo-telus-light-theme.svg | hogwarts | |
| 277 | 68c0da6f0355389e7e84b6fc_cs-logo-telus-dark-theme.svg | hogwarts | |
| 278 | 68c2af789b88bae0a3066e7e_68068b75a6e0e851d2777dac_c2015d2dfa5c2c58d52308460cb2e395_github%201.svg | hogwarts | |
| 279 | 68c2af7caa82305768f2a598_68068b75a6e0e851d2777dac_c2015d2dfa5c2c58d52308460cb2e395_github%203.svg | hogwarts | |
| 280 | 68c2af863ee4a7acccb3f45c_68079342136c3363721f7e0c_terraform%201.svg | hogwarts | |
| 281 | 68c2af8a70faf1100b4bef20_68079342136c3363721f7e0c_terraform%203.svg | hogwarts | |
| 282 | 68c33859cc6cd903686c66a2_apple-touch-icon.png | hogwarts | |
| 283 | 68c469d18f61fb5c21c81781_og-claude-api.jpg | hogwarts | |
| 284 | 68c469d23594abeb9ab6ee48_og-claude-generic.jpg | hogwarts | |
| 285 | 68c469d41149ace562bfd24d_og-claude-product-claude-code.jpg | hogwarts | |
| 286 | 68c47a3df6f37b772965a5c4_uber.svg | hogwarts | |
| 287 | 68c47a4368d48e57ad911656_uber-1.svg | hogwarts | |
| 288 | 68c4897e0ac296b8c65e5713_Frame-1.svg | hogwarts | |
| 289 | 68c4898064ee45d6186056ab_Frame.svg | hogwarts | |
| 290 | 68c48990d9a0e1151fbca673_Frame-1.svg | hogwarts | |
| 291 | 68c48993030cb1dfe37dabf4_Frame.svg | hogwarts | |
| 292 | 68c489a80ac296b8c65e6325_Frame.svg | hogwarts | |
| 293 | 68c489aaa0987c57ca802af7_Frame-1.svg | hogwarts | |
| 294 | 68c489b6439ef9129f4ecb8f_Frame-1.svg | hogwarts | |
| 295 | 68c489b8966cebb45401e741_Frame.svg | hogwarts | |
| 296 | 68c489c59bf687f3523a0c28_Frame-1.svg | hogwarts | |
| 297 | 68c489c736a796914217c773_Frame.svg | hogwarts | |
| 298 | 68c4a592513520b6bbd637da_Layer_1-1.svg | hogwarts | |
| 299 | 68c4a5959fd62ae427cb020f_Layer_1.svg | hogwarts | |
| 300 | 68c5ad1e918bdf72ba184fd2_2.svg | hogwarts | |
| 301 | 68c76f99b3bfa0054f29a3eb_overview-code-artifact-p-1080.webp | hogwarts | |
| 302 | 68c76f99b3bfa0054f29a3eb_overview-code-artifact-p-1600.webp | hogwarts | |
| 303 | 68c76f99b3bfa0054f29a3eb_overview-code-artifact-p-500.webp | hogwarts | |
| 304 | 68c76f99b3bfa0054f29a3eb_overview-code-artifact-p-800.webp | hogwarts | |
| 305 | 68c76f99b3bfa0054f29a3eb_overview-code-artifact.webp | hogwarts | |
| 306 | 68c76f9a194725f4b9790e29_overview-create-artifact-p-1080.webp | hogwarts | |
| 307 | 68c76f9a194725f4b9790e29_overview-create-artifact-p-1600.webp | hogwarts | |
| 308 | 68c76f9a194725f4b9790e29_overview-create-artifact-p-500.webp | hogwarts | |
| 309 | 68c76f9a194725f4b9790e29_overview-create-artifact-p-800.webp | hogwarts | |
| 310 | 68c76f9a194725f4b9790e29_overview-create-artifact.webp | hogwarts | |
| 311 | 68c76f9a25c6a6c8dd9cb1f1_platform-p-1080.webp | hogwarts | |
| 312 | 68c76f9a25c6a6c8dd9cb1f1_platform-p-1600.webp | hogwarts | |
| 313 | 68c76f9a25c6a6c8dd9cb1f1_platform-p-500.webp | hogwarts | |
| 314 | 68c76f9a25c6a6c8dd9cb1f1_platform-p-800.webp | hogwarts | |
| 315 | 68c76f9a25c6a6c8dd9cb1f1_platform.webp | hogwarts | |
| 316 | 68c76f9a5e297da74acb6b48_overview-research-artifact-p-1080.webp | hogwarts | |
| 317 | 68c76f9a5e297da74acb6b48_overview-research-artifact-p-1600.webp | hogwarts | |
| 318 | 68c76f9a5e297da74acb6b48_overview-research-artifact-p-500.webp | hogwarts | |
| 319 | 68c76f9a5e297da74acb6b48_overview-research-artifact-p-800.webp | hogwarts | |
| 320 | 68c76f9a5e297da74acb6b48_overview-research-artifact.webp | hogwarts | |
| 321 | 68c76f9ac6402efc7f0c54ba_overview-analyze-artifact-p-1080.webp | hogwarts | |
| 322 | 68c76f9ac6402efc7f0c54ba_overview-analyze-artifact-p-1600.webp | hogwarts | |
| 323 | 68c76f9ac6402efc7f0c54ba_overview-analyze-artifact-p-500.webp | hogwarts | |
| 324 | 68c76f9ac6402efc7f0c54ba_overview-analyze-artifact-p-800.webp | hogwarts | |
| 325 | 68c76f9ac6402efc7f0c54ba_overview-analyze-artifact.webp | hogwarts | |
| 326 | 68c76f9af3599d418f2ef8de_overview-learn-artifact-p-1080.webp | hogwarts | |
| 327 | 68c76f9af3599d418f2ef8de_overview-learn-artifact-p-1600.webp | hogwarts | |
| 328 | 68c76f9af3599d418f2ef8de_overview-learn-artifact-p-500.webp | hogwarts | |
| 329 | 68c76f9af3599d418f2ef8de_overview-learn-artifact-p-800.webp | hogwarts | |
| 330 | 68c76f9af3599d418f2ef8de_overview-learn-artifact.webp | hogwarts | |
| 331 | 68d5faa6352b26bf7542cb9b_logo_rakuten-light.svg | hogwarts | |
| 332 | 68d5fab610bf0d091b541153_logo_rakuten-dark.svg | hogwarts | |
| 333 | 68da9ce4c99c81d8a2e0bf88_toast-featured_image-p-1080.webp | hogwarts | |
| 334 | 68da9ce4c99c81d8a2e0bf88_toast-featured_image-p-500.webp | hogwarts | |
| 335 | 68da9ce4c99c81d8a2e0bf88_toast-featured_image-p-800.webp | hogwarts | |
| 336 | 68da9ce4c99c81d8a2e0bf88_toast-featured_image.webp | hogwarts | |
| 337 | 68dac4b37af604914e5d5227_logo_cursor-light.svg | hogwarts | |
| 338 | 68dac4c2a9e0c720c049e9e6_logo_cursor-dark.svg | hogwarts | |
| 339 | Abstract-Curves-01.svg | hogwarts | |
| 340 | Abstract-Curves-02.svg | hogwarts | |
| 341 | Abstract-Letter-01.svg | hogwarts | |
| 342 | Abstract-Machinery-01.svg | hogwarts | |
| 343 | Abstract-Organic.svg | hogwarts | |
| 344 | amex.svg | hogwarts | |
| 345 | apple-pay.svg | hogwarts | |
| 346 | book-open.svg | hogwarts | |
| 347 | check-circle.svg | hogwarts | |
| 348 | dal.png | hogwarts | |
| 349 | degree.png | hogwarts | |
| 350 | document.svg | hogwarts | |
| 351 | TXT | extracted-urls.txt | hogwarts |
| 352 | f1664b95be4e2e828a180cf9f015a0b6f8365472-5760x3240.png | hogwarts | |
| 353 | faisal.png | hogwarts | |
| 354 | fawry.svg | hogwarts | |
| 355 | files.png | hogwarts | |
| 356 | google-pay.svg | hogwarts | |
| 357 | graduation-cap.svg | hogwarts | |
| 358 | Hands-Abstract-01.svg | hogwarts | |
| 359 | Hands-Abstract-Complex-01.svg | hogwarts | |
| 360 | hands-build.svg | hogwarts | |
| 361 | Hands-Circular.svg | hogwarts | |
| 362 | Hands-Complex-01.svg | hogwarts | |
| 363 | Hands-Document-02.svg | hogwarts | |
| 364 | Hands-Document.svg | hogwarts | |
| 365 | Hands-Figure-01.svg | hogwarts | |
| 366 | Hands-Figure-02.svg | hogwarts | |
| 367 | Hands-Gesture-01.svg | hogwarts | |
| 368 | Hands-Gesture-02.svg | hogwarts | |
| 369 | Hands-Gesture-04.svg | hogwarts | |
| 370 | Hands-Gesture-05.svg | hogwarts | |
| 371 | Hands-Gesture-Background-01.svg | hogwarts | |
| 372 | Hands-Interaction.svg | hogwarts | |
| 373 | hands-stack.svg | hogwarts | |
| 374 | Hands-Terrain-02.svg | hogwarts | |
| 375 | Hands-Terrain.svg | hogwarts | |
| 376 | MD | icon-renaming-mapping.md | hogwarts |
| 377 | id.png | hogwarts | |
| 378 | image.png | hogwarts | |
| 379 | khartoum.png | hogwarts | |
| 380 | Letter-Abstract-01.svg | hogwarts | |
| 381 | Letter-Abstract-02.svg | hogwarts | |
| 382 | Letter-E-01.svg | hogwarts | |
| 383 | Letter-M-01.svg | hogwarts | |
| 384 | Letter-M-02.svg | hogwarts | |
| 385 | Letter-P-01.svg | hogwarts | |
| 386 | Letter-W-Figure.svg | hogwarts | |
| 387 | Letter-W-Person-01.svg | hogwarts | |
| 388 | logo.png | hogwarts | |
| 389 | mada.svg | hogwarts | |
| 390 | master-card.png | hogwarts | |
| 391 | mastercard.svg | hogwarts | |
| 392 | mtdt.png | hogwarts | |
| 393 | news.svg | hogwarts | |
| 394 | Objects-Document-02.svg | hogwarts | |
| 395 | Objects-Document-Layout-01.svg | hogwarts | |
| 396 | objects-puzzle.svg | hogwarts | |
| 397 | paypal.svg | hogwarts | |
| 398 | People-Figure-02.svg | hogwarts | |
| 399 | People-Figure-03.svg | hogwarts | |
| 400 | People-Figure-04.svg | hogwarts | |
| 401 | People-Motion-01.svg | hogwarts | |
| 402 | People-Multiple-01.svg | hogwarts | |
| 403 | PS1 | rename-icons.ps1 | hogwarts |
| 404 | TXT | rename-log.txt | hogwarts |
| 405 | resume.png | hogwarts | |
| 406 | Scene-Complex-01.svg | hogwarts | |
| 407 | Scene-Complex-02.svg | hogwarts | |
| 408 | Scene-Complex-03.svg | hogwarts | |
| 409 | Scene-Complex-04.svg | hogwarts | |
| 410 | Scene-Complex-05.svg | hogwarts | |
| 411 | Scene-Detailed-01.svg | hogwarts | |
| 412 | Scene-Detailed-02.svg | hogwarts | |
| 413 | Scene-Organic-01.svg | hogwarts | |
| 414 | Scene-Terrain.svg | hogwarts | |
| 415 | Scene-Wavy-01.svg | hogwarts | |
| 416 | Scene-Wide-01.svg | hogwarts | |
| 417 | Scene-Wide-Orange-01.svg | hogwarts | |
| 418 | activities-goggles.webp | hogwarts | |
| 419 | activities-paint.png | hogwarts | |
| 420 | activities-trophy.png | hogwarts | |
| 421 | activities.webp | hogwarts | |
| 422 | backpack.webp | hogwarts | |
| 423 | basketball.webp | hogwarts | |
| 424 | bread.webp | hogwarts | |
| 425 | clock.webp | hogwarts | |
| 426 | events.webp | hogwarts | |
| 427 | fee.svg | hogwarts | |
| 428 | fees.svg | hogwarts | |
| 429 | frame.webp | hogwarts | |
| 430 | graduation.webp | hogwarts | |
| 431 | juice.webp | hogwarts | |
| 432 | notebooks.webp | hogwarts | |
| 433 | palette.webp | hogwarts | |
| 434 | security.webp | hogwarts | |
| 435 | supplies.webp | hogwarts | |
| 436 | textbooks.webp | hogwarts | |
| 437 | transport.webp | hogwarts | |
| 438 | trips.webp | hogwarts | |
| 439 | uniform.webp | hogwarts | |
| 440 | star-outline.svg | hogwarts | |
| 441 | stcpay.svg | hogwarts | |
| 442 | stream-community.svg | hogwarts | |
| 443 | stream-curated-courses.svg | hogwarts | |
| 444 | stream-interactive-learning.svg | hogwarts | |
| 445 | stream-progress-tracking.svg | hogwarts | |
| 446 | transcript.png | hogwarts | |
| 447 | uok.png | hogwarts | |
| 448 | users.svg | hogwarts | |
| 449 | visa.svg | hogwarts | |
| 450 | JSON | cdn-manifest.json | hogwarts |
| 451 | ic-wa-archived-24.svg | hogwarts | |
| 452 | ic-wa-bubble-tail-fill.svg | hogwarts | |
| 453 | ic-wa-bubble-tail-mask.svg | hogwarts | |
| 454 | ic-wa-bubble-tail.svg | hogwarts | |
| 455 | ic-wa-camera-24.svg | hogwarts | |
| 456 | ic-wa-camera-small-32.svg | hogwarts | |
| 457 | ic-wa-check-bubble-17.svg | hogwarts | |
| 458 | ic-wa-check-read-19.svg | hogwarts | |
| 459 | ic-wa-check-sent-19.svg | hogwarts | |
| 460 | ic-wa-chevron-lt-32.svg | hogwarts | |
| 461 | ic-wa-close-circular-24.svg | hogwarts | |
| 462 | ic-wa-deleted-16.svg | hogwarts | |
| 463 | ic-wa-disappearing-16.svg | hogwarts | |
| 464 | ic-wa-group-16.svg | hogwarts | |
| 465 | ic-wa-location-16.svg | hogwarts | |
| 466 | ic-wa-lock-12.svg | hogwarts | |
| 467 | ic-wa-meetball-24.svg | hogwarts | |
| 468 | ic-wa-meta-ai-circle.svg | hogwarts | |
| 469 | ic-wa-mic-32.svg | hogwarts | |
| 470 | ic-wa-phone-32.svg | hogwarts | |
| 471 | ic-wa-pin-16.svg | hogwarts | |
| 472 | ic-wa-plus-add-24.svg | hogwarts | |
| 473 | ic-wa-plus-filter-24.svg | hogwarts | |
| 474 | ic-wa-plus-input-32.svg | hogwarts | |
| 475 | ic-wa-search-24.svg | hogwarts | |
| 476 | ic-wa-send-24.svg | hogwarts | |
| 477 | ic-wa-status-battery.svg | hogwarts | |
| 478 | ic-wa-status-cellular.svg | hogwarts | |
| 479 | ic-wa-status-wifi.svg | hogwarts | |
| 480 | ic-wa-sticker-24.svg | hogwarts | |
| 481 | ic-wa-tab-calls-32.svg | hogwarts | |
| 482 | ic-wa-tab-chats-32.svg | hogwarts | |
| 483 | ic-wa-tab-communities-32.svg | hogwarts | |
| 484 | ic-wa-tab-settings-32.svg | hogwarts | |
| 485 | ic-wa-tab-updates-32.svg | hogwarts | |
| 486 | ic-wa-updates-ring-bottom.svg | hogwarts | |
| 487 | ic-wa-updates-ring-full.svg | hogwarts | |
| 488 | ic-wa-updates-ring-left.svg | hogwarts | |
| 489 | ic-wa-updates-ring-quarter.svg | hogwarts | |
| 490 | ic-wa-updates-ring-right.svg | hogwarts | |
| 491 | ic-wa-updates-ring-top.svg | hogwarts | |
| 492 | ic-wa-video-32.svg | hogwarts | |
| 493 | ic-wa-voice-16.svg | hogwarts | |
| 494 | JSON | manifest.json | hogwarts |
| 495 | pic-wa-contact-doc.jpg | hogwarts | |
| 496 | pic-wa-sample-biff.jpg | hogwarts | |
| 497 | pic-wa-sample-clocktower.png | hogwarts | |
| 498 | pic-wa-sample-daddy.jpg | hogwarts | |
| 499 | pic-wa-sample-dave.jpg | hogwarts | |
| 500 | pic-wa-sample-doc.jpg | hogwarts | |
| 501 | pic-wa-sample-jenny.png | hogwarts | |
| 502 | pic-wa-sample-lynda.png | hogwarts | |
| 503 | pic-wa-sample-mom.png | hogwarts | |
| 504 | pic-wa-sample-strickland.jpg | hogwarts | |
| 505 | wp-wa-chat-bg.svg | hogwarts | |
| 506 | z.png | hogwarts | |
| 507 | zain.png | hogwarts | |
| 508 | ![]() | id-cards.png | hogwarts |
| 509 | ![]() | id.png | hogwarts |
| 510 | ![]() | ai-fluency-hero.webp | hogwarts |
| 511 | ![]() | app-store.png | hogwarts |
| 512 | ![]() | assigment.png | hogwarts |
| 513 | ![]() | attendance.png | hogwarts |
| 514 | ![]() | blackboard.png | hogwarts |
| 515 | ![]() | calendar-2.png | hogwarts |
| 516 | ![]() | canteen.png | hogwarts |
| 517 | category-01.svg | hogwarts | |
| 518 | category-03.svg | hogwarts | |
| 519 | category-06.svg | hogwarts | |
| 520 | category-08.svg | hogwarts | |
| 521 | ![]() | champion.png | hogwarts |
| 522 | claude-code-best-practices.svg | hogwarts | |
| 523 | ![]() | community.png | hogwarts |
| 524 | ![]() | cover-letter.png | hogwarts |
| 525 | ![]() | credit-card.png | hogwarts |
| 526 | ![]() | data-science.png | hogwarts |
| 527 | ![]() | download.png | hogwarts |
| 528 | ![]() | email.png | hogwarts |
| 529 | ![]() | espical.png | hogwarts |
| 530 | ![]() | events.png | hogwarts |
| 531 | ![]() | exam.png | hogwarts |
| 532 | ![]() | fees.png | hogwarts |
| 533 | ![]() | galaxy-brain-detail.png | hogwarts |
| 534 | ![]() | generative-ai.png | hogwarts |
| 535 | ![]() | glass.png | hogwarts |
| 536 | ![]() | gradebook.png | hogwarts |
| 537 | ![]() | graduate.png | hogwarts |
| 538 | ![]() | hat.png | hogwarts |
| 539 | ![]() | headphone.png | hogwarts |
| 540 | ![]() | id-cards.png | hogwarts |
| 541 | ![]() | inspire.jpg | hogwarts |
| 542 | ![]() | international.png | hogwarts |
| 543 | ![]() | invoicing.png | hogwarts |
| 544 | ![]() | it-certifications.png | hogwarts |
| 545 | ![]() | library.png | hogwarts |
| 546 | ![]() | light-bulb.png | hogwarts |
| 547 | ![]() | messaging.png | hogwarts |
| 548 | ![]() | notifications.png | hogwarts |
| 549 | ![]() | offer.png | hogwarts |
| 550 | onboarding-step2.svg | hogwarts | |
| 551 | ![]() | pair-extraordinaire-detail.png | hogwarts |
| 552 | ![]() | parent.png | hogwarts |
| 553 | ![]() | payroll.png | hogwarts |
| 554 | ![]() | phone.png | hogwarts |
| 555 | ![]() | private.png | hogwarts |
| 556 | ![]() | public-sponsor-detail.png | hogwarts |
| 557 | ![]() | pull-shark-detail.png | hogwarts |
| 558 | ![]() | quickdraw-detail.png | hogwarts |
| 559 | ![]() | reward.jpg | hogwarts |
| 560 | ![]() | robot.png | hogwarts |
| 561 | ![]() | role-based.png | hogwarts |
| 562 | ![]() | starstruck-detail.png | hogwarts |
| 563 | ![]() | student.png | hogwarts |
| 564 | ![]() | teach.jpg | hogwarts |
| 565 | ![]() | teacher.png | hogwarts |
| 566 | ![]() | techincal.png | hogwarts |
| 567 | ![]() | teleport.png | hogwarts |
| 568 | ![]() | tent.png | hogwarts |
| 569 | think-tool.svg | hogwarts | |
| 570 | ![]() | timetable.png | hogwarts |
| 571 | ![]() | transport.png | hogwarts |
| 572 | ![]() | video.png | hogwarts |
| 573 | ![]() | wallet-3.png | hogwarts |
| 574 | welcome-characters.svg | hogwarts | |
| 575 | ![]() | world.png | hogwarts |
| 576 | ![]() | yolo-detail.png | hogwarts |
| 577 | ![]() | image.png | hogwarts |
| 578 | ![]() | phone-mockup.webp | hogwarts |
| 579 | ![]() | inspire.jpg | hogwarts |
| 580 | ![]() | international.png | hogwarts |
| 581 | ![]() | invoicing.png | hogwarts |
| 582 | ![]() | it-certifications.png | hogwarts |
| 583 | ![]() | khartoum.png | hogwarts |
| 584 | ![]() | king-fahad-hero.webp | hogwarts |
| 585 | ![]() | king-fahad-logo.png | hogwarts |
| 586 | marker-icon-2x.png | hogwarts | |
| 587 | marker-icon.png | hogwarts | |
| 588 | ![]() | marker-shadow.png | hogwarts |
| 589 | ![]() | library.png | hogwarts |
| 590 | book.svg | hogwarts | |
| 591 | bookmark.svg | hogwarts | |
| 592 | edit.svg | hogwarts | |
| 593 | home.svg | hogwarts | |
| 594 | logo.svg | hogwarts | |
| 595 | trash.svg | hogwarts | |
| 596 | user.svg | hogwarts | |
| 597 | users.svg | hogwarts | |
| 598 | book.svg | hogwarts | |
| 599 | calendar.svg | hogwarts | |
| 600 | clock.svg | hogwarts | |
| 601 | heart.svg | hogwarts | |
| 602 | home.svg | hogwarts | |
| 603 | logo.svg | hogwarts | |
| 604 | logout.svg | hogwarts | |
| 605 | search-fill.svg | hogwarts | |
| 606 | star.svg | hogwarts | |
| 607 | upload.svg | hogwarts | |
| 608 | user-fill.svg | hogwarts | |
| 609 | user.svg | hogwarts | |
| 610 | ![]() | auth-illustration.png | hogwarts |
| 611 | ![]() | pattern.webp | hogwarts |
| 612 | ![]() | light-bulb.png | hogwarts |
| 613 | lock.svg | hogwarts | |
| 614 | ![]() | logo.png | hogwarts |
| 615 | mada.svg | hogwarts | |
| 616 | ![]() | map.jpeg | hogwarts |
| 617 | ![]() | master-card.png | hogwarts |
| 618 | mastercard.svg | hogwarts | |
| 619 | matching.svg | hogwarts | |
| 620 | ![]() | mazin.jpg | hogwarts |
| 621 | ![]() | mcgonagall.jpeg | hogwarts |
| 622 | MP4 | story.mp4 | hogwarts |
| 623 | ![]() | messaging.png | hogwarts |
| 624 | ![]() | mtdt.png | hogwarts |
| 625 | multi-select.svg | hogwarts | |
| 626 | multiple-choice.svg | hogwarts | |
| 627 | news.svg | hogwarts | |
| 628 | ![]() | notifications.png | hogwarts |
| 629 | ![]() | offer.png | hogwarts |
| 630 | ![]() | espical.png | hogwarts |
| 631 | ![]() | gear.png | hogwarts |
| 632 | ![]() | international.png | hogwarts |
| 633 | ![]() | private.png | hogwarts |
| 634 | ![]() | public.png | hogwarts |
| 635 | ![]() | techincal.png | hogwarts |
| 636 | ![]() | tools.png | hogwarts |
| 637 | ordering.svg | hogwarts | |
| 638 | ![]() | pair-extraordinaire-detail.png | hogwarts |
| 639 | ![]() | parent.png | hogwarts |
| 640 | amex.svg | hogwarts | |
| 641 | apple-pay.svg | hogwarts | |
| 642 | fawry.svg | hogwarts | |
| 643 | google-pay.svg | hogwarts | |
| 644 | mada.svg | hogwarts | |
| 645 | mastercard.svg | hogwarts | |
| 646 | paypal.svg | hogwarts | |
| 647 | stcpay.svg | hogwarts | |
| 648 | visa.svg | hogwarts | |
| 649 | paypal.svg | hogwarts | |
| 650 | ![]() | payroll.png | hogwarts |
| 651 | ![]() | phone.png | hogwarts |
| 652 | ![]() | photo.png | hogwarts |
| 653 | ![]() | dumbledore.jpeg | hogwarts |
| 654 | ![]() | gryffindor.jpeg | hogwarts |
| 655 | ![]() | hagrid.jpeg | hogwarts |
| 656 | ![]() | harry-potter.png | hogwarts |
| 657 | ![]() | hupplepuff.jpeg | hogwarts |
| 658 | ![]() | map.jpeg | hogwarts |
| 659 | ![]() | mazin.jpg | hogwarts |
| 660 | ![]() | mcgonagall.jpeg | hogwarts |
| 661 | ![]() | ravenclaw.jpeg | hogwarts |
| 662 | ![]() | slytherin.jpg | hogwarts |
| 663 | ![]() | snape.jpeg | hogwarts |
| 664 | ![]() | trian.jpeg | hogwarts |
| 665 | plus.svg | hogwarts | |
| 666 | ![]() | poll.png | hogwarts |
| 667 | ![]() | private.png | hogwarts |
| 668 | ![]() | public-sponsor-detail.png | hogwarts |
| 669 | ![]() | pull-shark-detail.png | hogwarts |
| 670 | ![]() | quickdraw-detail.png | hogwarts |
| 671 | ![]() | ravenclaw.jpeg | hogwarts |
| 672 | ![]() | resume.png | hogwarts |
| 673 | ![]() | reward.jpg | hogwarts |
| 674 | ![]() | robot.png | hogwarts |
| 675 | ![]() | role-based.png | hogwarts |
| 676 | short-answer.svg | hogwarts | |
| 677 | ![]() | a.jpeg | hogwarts |
| 678 | ![]() | b.jpeg | hogwarts |
| 679 | ![]() | ball.png | hogwarts |
| 680 | ![]() | book.png | hogwarts |
| 681 | ![]() | c.jpeg | hogwarts |
| 682 | ![]() | champion.png | hogwarts |
| 683 | ![]() | community.png | hogwarts |
| 684 | ![]() | d.jpeg | hogwarts |
| 685 | ![]() | dumbledore.jpeg | hogwarts |
| 686 | ![]() | e.jpeg | hogwarts |
| 687 | file.svg | hogwarts | |
| 688 | ![]() | g.jpeg | hogwarts |
| 689 | ![]() | glass.png | hogwarts |
| 690 | globe.svg | hogwarts | |
| 691 | ![]() | gryffindor.jpeg | hogwarts |
| 692 | ![]() | h.jpeg | hogwarts |
| 693 | ![]() | hagrid.jpeg | hogwarts |
| 694 | ![]() | harry-potter.jpeg | hogwarts |
| 695 | ![]() | harry-potter.png | hogwarts |
| 696 | ![]() | harry.jpg | hogwarts |
| 697 | ![]() | hat.jpeg | hogwarts |
| 698 | ![]() | hat.png | hogwarts |
| 699 | ![]() | hermione.jpg | hogwarts |
| 700 | ![]() | hupplepuff.jpeg | hogwarts |
| 701 | ![]() | logo.png | hogwarts |
| 702 | ![]() | map.jpeg | hogwarts |
| 703 | ![]() | mcgonagall.jpeg | hogwarts |
| 704 | next.svg | hogwarts | |
| 705 | ![]() | ravenclaw.jpeg | hogwarts |
| 706 | ![]() | slytherin.jpg | hogwarts |
| 707 | ![]() | snape.jpeg | hogwarts |
| 708 | ![]() | teleport.png | hogwarts |
| 709 | ![]() | trian.jpeg | hogwarts |
| 710 | vercel.svg | hogwarts | |
| 711 | window.svg | hogwarts | |
| 712 | ![]() | x.jpeg | hogwarts |
| 713 | ![]() | slytherin.jpg | hogwarts |
| 714 | smiley.svg | hogwarts | |
| 715 | ![]() | snape.jpeg | hogwarts |
| 716 | ![]() | 249.png | hogwarts |
| 717 | ![]() | dal.png | hogwarts |
| 718 | ![]() | faisal.png | hogwarts |
| 719 | ![]() | khartoum.png | hogwarts |
| 720 | ![]() | mtdt.png | hogwarts |
| 721 | ![]() | uok.png | hogwarts |
| 722 | ![]() | zain.png | hogwarts |
| 723 | ![]() | stack.png | hogwarts |
| 724 | star-outline.svg | hogwarts | |
| 725 | ![]() | starstruck-detail.png | hogwarts |
| 726 | stcpay.svg | hogwarts | |
| 727 | MP4 | story.mp4 | hogwarts |
| 728 | ![]() | inspire.jpg | hogwarts |
| 729 | ![]() | reward.jpg | hogwarts |
| 730 | ![]() | data-science.png | hogwarts |
| 731 | ![]() | generative-ai.png | hogwarts |
| 732 | ![]() | it-certifications.png | hogwarts |
| 733 | ![]() | teach.jpg | hogwarts |
| 734 | ![]() | student.png | hogwarts |
| 735 | ![]() | biological-sciences.png | hogwarts |
| 736 | ![]() | chemical-sciences.png | hogwarts |
| 737 | ![]() | civics-citizenship.png | hogwarts |
| 738 | ![]() | default.png | hogwarts |
| 739 | ![]() | earth-space-sciences.png | hogwarts |
| 740 | ![]() | economics-business.png | hogwarts |
| 741 | ![]() | english.png | hogwarts |
| 742 | ![]() | geography.png | hogwarts |
| 743 | ![]() | history.png | hogwarts |
| 744 | ![]() | languages.png | hogwarts |
| 745 | ![]() | mathematics.png | hogwarts |
| 746 | ![]() | personal-development-health.png | hogwarts |
| 747 | ![]() | physical-education.png | hogwarts |
| 748 | ![]() | physical-sciences.png | hogwarts |
| 749 | ![]() | religion-philosophy.png | hogwarts |
| 750 | ![]() | technologies.png | hogwarts |
| 751 | ![]() | the-arts.png | hogwarts |
| 752 | ![]() | teach.jpg | hogwarts |
| 753 | ![]() | teacher.png | hogwarts |
| 754 | ![]() | techincal.png | hogwarts |
| 755 | ![]() | telephone.png | hogwarts |
| 756 | ![]() | teleport.png | hogwarts |
| 757 | ![]() | tent.png | hogwarts |
| 758 | think-tool.svg | hogwarts | |
| 759 | thumb.png | hogwarts | |
| 760 | ![]() | timetable.png | hogwarts |
| 761 | ![]() | placeholder-logo.png | hogwarts |
| 762 | placeholder-logo.svg | hogwarts | |
| 763 | ![]() | placeholder-user.jpg | hogwarts |
| 764 | ![]() | placeholder.jpg | hogwarts |
| 765 | placeholder.svg | hogwarts | |
| 766 | ![]() | transcript.png | hogwarts |
| 767 | ![]() | transport.png | hogwarts |
| 768 | ![]() | trian.jpeg | hogwarts |
| 769 | true-false.svg | hogwarts | |
| 770 | ![]() | github-profile.png | hogwarts |
| 771 | ![]() | uok.png | hogwarts |
| 772 | users.svg | hogwarts | |
| 773 | ![]() | video.png | hogwarts |
| 774 | visa.svg | hogwarts | |
| 775 | ![]() | wallet-3.png | hogwarts |
| 776 | ![]() | whatsapp-bg.png | hogwarts |
| 777 | ![]() | world.png | hogwarts |
| 778 | ![]() | yolo-detail.png | hogwarts |
| 779 | ![]() | z.png | hogwarts |
| 780 | ![]() | zain.png | hogwarts |
/icons showroom renders the live bucket. If it
is on the showroom, every repo can use it; if it is not, it does not exist yet.pnpm codebase add cdn copies one file into a consuming repo.
Two env vars drive it, so the helper is the same in hogwarts, souq, mkan, shifa, and kun.aws:SourceArn.Every asset lives under https://cdn.databayt.org/ and is classified by its first path
segment. The classifier is tierOf(key) in src/lib/cdn.ts. There are exactly four tiers:
| Tier | First segment | Shape | Example URL | Helper |
|---|---|---|---|---|
| Vendor mirror | a brand name | BRAND/FILE | /anthropic/wordmark.svg | cdn.vendor(brand, file) |
| Shared primitives | icons / illustrations / animations | NS/FILE | /icons/visa.svg | cdn.shared(ns, file) |
| Product namespace | hogwarts / souq / mkan / shifa / kun | PRODUCT/PATH | /hogwarts/photos/campus.jpg | cdn.product(path) |
| Content catalog | catalog | catalog/CURRICULUM/GRADE/SUBJECT/ASSET | /catalog/sudan/g7/math/ch1.pdf | cdn.catalog({...}) |
Anything whose top-level segment is not a known shared, product, or content namespace is treated
as a vendor mirror. That is by design: dropping stripe/logo.svg at the root just works and
shows up as a vendor asset, no config change required.
Third-party brand assets we self-host instead of hot-linking — logos, wordmarks, payment marks,
partner glyphs. Flat: BRAND/FILE. No category subfolders.
import { cdn } from "@/lib/cdn"
cdn.vendor("anthropic", "wordmark.svg")
// → https://cdn.databayt.org/anthropic/wordmark.svgicons / illustrations / animationsDesign primitives shared across every product. Exactly three namespaces, fixed in
SHARED_NAMESPACES:
icons — UI glyphs, payment/brand marks used in-app (SVG).illustrations — larger decorative art, empty states, hero graphics.animations — Lottie JSON and animated assets.cdn.shared("icons", "visa.svg")
// → https://cdn.databayt.org/icons/visa.svg
cdn.shared("animations", "confetti.json")
// → https://cdn.databayt.org/animations/confetti.jsonhogwarts / souq / mkan / shifa / kunMedia owned by a single product. A repo addresses its own media with cdn.product(path), which
prefixes the path with that repo's NEXT_PUBLIC_CDN_NAMESPACE. Set the env var once and the
product prefix is implicit forever after.
// In the hogwarts repo, with NEXT_PUBLIC_CDN_NAMESPACE=hogwarts
cdn.product("photos/campus.jpg")
// → https://cdn.databayt.org/hogwarts/photos/campus.jpgA repo that forgets to set NEXT_PUBLIC_CDN_NAMESPACE will build product URLs with the namespace
segment missing (the path hangs off the host root) and silently mis-key its own media. Setting it
is part of the adopt-per-repo runbook below for exactly this reason.
To reach another product's namespace (rare), use the vendor helper with the namespace as the
first segment, or urlForKey("souq/banners/eid.jpg") directly.
Structured, hierarchical content — curriculum material, graded resources. One well-known root,
catalog, with a fixed depth so keys stay predictable and browsable.
cdn.catalog({ curriculum: "sudan", grade: "g7", subject: "math", asset: "ch1.pdf" })
// → https://cdn.databayt.org/catalog/sudan/g7/math/ch1.pdfKeys are the public contract. Once an asset is referenced from a repo, its key is effectively forever, so get it flat and clean the first time.
BRAND/FILE over BRAND/category/sub/FILE. The four-tier scheme
already encodes hierarchy in the first segment; do not re-encode it in deep folders. (Catalog
is the one intentional exception — its depth is the hierarchy.)anthropic/anthropic-wordmark.svg becomes anthropic/wordmark.svg. The flatten step in
scripts/build-cdn-manifest.ts does exactly this (anthropic/brand/anthropic-wordmark.svg
collapses to anthropic/wordmark.svg).-. No spaces, no underscores, no
capitals, no URL-encoding traps.node-constellation.svg, not img-04.svg..svg, .png, .webp, .json. isImage(key) keys off the
extension to decide whether the showroom renders a preview or an extension badge.tr: strings, no Cloudinary w_400,f_auto
segments baked into keys. The key is the object; sizing is a delivery concern.catalog/ is the one content tier with real depth — its path is the curriculum hierarchy, and
every image is a pure function of the entity's slugs (no per-row stored URL). hogwarts already
implements most of this; the scheme below is the clean, canonical shape.
catalog/<curriculum>/<subjectSlug>/[<chapterSlug>/[<lessonSlug>/]]<asset>
| Key | Asset | Form |
|---|---|---|
catalog/us/us-g3-math/banner | subject banner | prefix — resolver appends -sm/-md/-lg/-original.webp |
catalog/us/us-g3-math/thumbnail | subject thumbnail | prefix |
catalog/us/us-g3-math/cover.jpg | textbook cover | exact key, raw |
catalog/us/us-g3-math/textbook.pdf | textbook PDF | exact key, raw |
catalog/us/us-g3-math/fractions/thumbnail | chapter thumbnail | prefix |
catalog/us/us-g3-math/fractions/adding-fractions/thumbnail | lesson thumbnail | prefix |
catalog/source-covers/JjKENb | raw ClickView snapshot | provenance — never referenced by a row |
subjectSlug is global and grade-stamped (us-g3-math), so there is no separate grade
segment; chapterSlug and lessonSlug are unique only within their parent, so ancestors are
mandatory.
Preserving the coupling. The key is a pure function of the entity's slugs — a catalogKey(...)
helper byte-identical to cdn.catalog() — so the image follows the entity with no stored URL.
hogwarts' Subject.thumbnail/banner, Chapter.thumbnail, and Lesson.thumbnail hold the key
prefix; getCatalogImageUrl(key, size) resolves it to
https://cdn.databayt.org/<key>-<size>.webp.
ClickView provenance. Lesson covers originate from ClickView
(img.clickviewapp.com/v2/covers/<coverId>). The raw cover snapshots to
catalog/source-covers/<coverId> (decoupled from the external CDN), then processes into the WebP
variants; Lesson.coverId keeps the source id. In the manifest, every catalog/** asset carries
slug: "clickview" (a path-prefix rule in the builder, provenanceSlug()), so the showroom and
the asset tables surface a ClickView provenance beside the catalog path.
Three steps, identical in every repo.
Step 1 — vendor the helper. Copy the canonical file in (it is byte-identical across repos):
pnpm codebase add cdn
# drops src/lib/cdn.ts into the consuming repoStep 2 — set two env vars in the central .env:
NEXT_PUBLIC_CDN_DOMAIN=cdn.databayt.org
NEXT_PUBLIC_CDN_NAMESPACE=hogwarts # this repo's tier-3 segment: hogwarts | souq | mkan | shifa | kunNEXT_PUBLIC_CDN_DOMAIN sets the host for every URL the helper builds. NEXT_PUBLIC_CDN_NAMESPACE
is only used by cdn.product() to prefix this repo's own media. Both are NEXT_PUBLIC_ so they
inline into client bundles and the URLs are stable across server and browser.
Step 3 — import and call. No per-call host or namespace plumbing:
import { cdn } from "@/lib/cdn"
export function PayWithVisa() {
return <img src={cdn.shared("icons", "visa.svg")} alt="Visa" />
}
export function CampusHero() {
return <img src={cdn.product("photos/campus.jpg")} alt="Campus" />
}That is the whole integration. Because the helper reads env at module load, the same source file resolves to the right host and product prefix in every repo with zero edits.
/icons showroom — source of truthThe codebase repo's /icons route is the canonical gallery of everything on the CDN. It is not a
static page: it renders src/registry/cdn-manifest.json, so it always reflects the bucket as of
the last manifest build.
src/components/root/icons/content.tsx composes the page (hero + tabs + all).src/components/root/icons/all.tsx maps manifest.assets, resolving each key with
manifest.urlBase when set (local preview) and falling back to urlForKey(key) (the live CDN).isImage(key) decides preview-vs-badge; the tier of each key comes from tierOf(key).While the bucket is being seeded, the manifest carries urlBase: "/cdn" and the 12 seed SVGs are
bundled in public/cdn/anthropic/ so the showroom renders with no network dependency. Once the
distribution serves 200s for cdn.databayt.org, drop urlBase (or point it at the CDN) and the
same grid streams from cdn.databayt.org. Keep urlBase: "/cdn" until then — the live URLs will
fail while the domain still resolves to nothing.
scripts/build-cdn-manifest.ts lists the bucket and writes src/registry/cdn-manifest.json:
CDN_BUCKET=databayt-cdn AWS_REGION=us-east-1 \
AWS_ACCESS_KEY_ID=… AWS_SECRET_ACCESS_KEY=… \
pnpm tsx scripts/build-cdn-manifest.tsAlways pass CDN_BUCKET=databayt-cdn and AWS_REGION=us-east-1 explicitly. The script still
defaults CDN_BUCKET to the dead hogwarts-databayt bucket (which returns AllAccessDisabled)
and defaults AWS_REGION to auto — the latter is only valid for S3-compatible endpoints like
Tigris/R2, not for real AWS S3, which requires a concrete region.
It paginates ListObjectsV2, skips folder placeholders, sorts keys, and stamps generatedAt,
source, bucket, domain, and urlBase. Pass --flatten-vendor to preview the flattened
vendor keys (anthropic/brand/anthropic-wordmark.svg shown as anthropic/wordmark.svg) before
the bucket is actually re-keyed. The manifest type is CdnManifest in src/lib/cdn.ts:
export interface CdnManifest {
generatedAt: string
source: string
bucket: string
domain: string
urlBase?: string
assets: CdnAsset[]
}Rule of thumb: after any upload or re-key, regenerate the manifest and commit it. The showroom and the manifest move together.
The old infra is dead and is not being reused. We provision fresh:
| Resource | Value |
|---|---|
| S3 bucket | databayt-cdn (us-east-1) |
| Distribution | new CloudFront distribution with OAC |
| Domain | cdn.databayt.org (re-pointed to the new distribution) |
| TLS cert | ACM cert for cdn.databayt.org in us-east-1, DNS-validated |
| Access model | S3 Block Public Access fully ON; bucket policy grants the distribution only, via aws:SourceArn |
Guardrails that are non-negotiable:
OAC, not legacy OAI. Origin Access Control is the current best practice; OAI is deprecated.
No public ACLs, no public bucket policy, no public-read objects. Objects are reached only
through CloudFront via OAC. Never set public-read on the bucket or on individual objects, and
never add an s3:GetObject Principal: "*" statement — the only s3:GetObject grant is to the
distribution, scoped by aws:SourceArn on the distribution ARN.
us-east-1 omits LocationConstraint. Creating the bucket in us-east-1 must not pass a
--create-bucket-configuration LocationConstraint=us-east-1 (the S3 API rejects it for the
default region). Create it plainly:
aws s3api create-bucket --bucket databayt-cdn --region us-east-1Cert region. CloudFront only accepts ACM certs from us-east-1. A cert in any other region
will not attach. Request it DNS-validated and add the CNAME validation record before issuing.
Re-point the domain. cdn.databayt.org currently CNAMEs a dead distribution and 000s. The
DNS record must move to the new distribution's domain name and the alias added to the
distribution before TLS resolves.
Immutable caching + invalidation. Uploads set Cache-Control: public, max-age=31536000, immutable and the correct Content-Type; after any re-key or overwrite, invalidate the
affected CloudFront paths so edges do not serve stale bytes.
AWS CLI is not assumed to be installed locally — install it with brew install awscli (or use
npx-based equivalents) before running the provisioning runbook.
We are decommissioning ik.imagekit.io/abdout (ImageKit) and the Cloudinary account. The move is
mechanical and reversible until the final decommission step. Six phases:
Enumerate every asset reference in every repo. Grep for the legacy hosts and list the distinct remote URLs:
# Across each repo (hogwarts, souq, mkan, shifa, kun, codebase):
grep -rEo "https?://[^\"')]*(imagekit\.io|res\.cloudinary\.com)[^\"')]*" src \
| sort -u > cdn-inventory.txtFor each hit record: the source URL, the file it lives in, and which tier it belongs to (vendor brand, shared primitive, product media, or catalog content).
Map each legacy URL to its clean CDN key, applying the key-naming rules. Strip transform params, flatten folders, drop redundant brand prefixes.
| Legacy URL | New key | Tier |
|---|---|---|
ik.imagekit.io/abdout/logos/anthropic-wordmark.svg | anthropic/wordmark.svg | vendor |
ik.imagekit.io/abdout/tr:w-400/icons/visa.png | icons/visa.png | shared |
res.cloudinary.com/abdout/image/upload/w_800,f_auto/hogwarts/campus.jpg | hogwarts/photos/campus.jpg | product |
res.cloudinary.com/abdout/.../sudan-g7-math-ch1.pdf | catalog/sudan/g7/math/ch1.pdf | content |
This table is illustrative — the real inventory must be generated per repo and reconciled before upload, or the call-site swaps will 404. Keep the reconciled table as the migration's manifest-of-record; it drives both the upload and the call-site swap.
sync.tsPull each source object from its legacy URL and PutObject it into databayt-cdn under the new
key, with the right Content-Type and long-lived cache headers. scripts/sync.ts does not exist
yet — author it as part of this migration: it reads the re-key table, downloads each legacy
object, and uploads in batches with Content-Type set and Cache-Control: public, max-age=31536000, immutable, then invalidates the affected CloudFront paths.
CDN_BUCKET=databayt-cdn AWS_REGION=us-east-1 \
AWS_ACCESS_KEY_ID=… AWS_SECRET_ACCESS_KEY=… \
pnpm tsx scripts/sync.ts cdn-inventory.txtUploads are idempotent (keyed by the target key), so re-running is safe. Never bake transform
params into the uploaded key — store the original, deliver via CloudFront. Never set the uploaded
objects to public-read; they are served only through the distribution via OAC.
Replace each legacy URL string with the helper call for its tier. This is where the inventory pays off — every reference is in the table:
- <img src="https://ik.imagekit.io/abdout/logos/anthropic-wordmark.svg" />
+ <img src={cdn.vendor("anthropic", "wordmark.svg")} />
- <img src="https://res.cloudinary.com/abdout/.../w_800/hogwarts/campus.jpg" />
+ <img src={cdn.product("photos/campus.jpg")} />Do this per repo, in small PRs, one tier at a time. After the swap, the only place the legacy hosts appear should be the inventory file itself.
CDN_BUCKET=databayt-cdn AWS_REGION=us-east-1 pnpm tsx scripts/build-cdn-manifest.ts) and confirm every migrated key shows up on the /icons showroom.imagekit.io / cloudinary matches in
application source.200 from cdn.databayt.org with a Hit from cloudfront cache
header and the correct Content-Type.pnpm build per repo to catch any missed references.Once every repo is verified and shipped:
next.config images.remotePatterns
entries pointing at the legacy hosts.cdn-inventory.txt and the re-key table in the codebase repo as the migration record.| Variable | Where | Value / purpose |
|---|---|---|
NEXT_PUBLIC_CDN_DOMAIN | every consuming repo (.env) | cdn.databayt.org — host for all helper URLs |
NEXT_PUBLIC_CDN_NAMESPACE | every consuming repo (.env) | this repo's tier-3 segment: hogwarts / souq / mkan / shifa / kun — used by cdn.product() |
CDN_BUCKET | manifest + sync scripts | databayt-cdn (always pass explicitly; the script default is the dead hogwarts-databayt) |
AWS_REGION | manifest + sync scripts | us-east-1 (always pass explicitly; the script default auto is invalid for real AWS S3) |
AWS_ACCESS_KEY_ID | manifest + sync scripts | net-new IAM key (never committed) |
AWS_SECRET_ACCESS_KEY | manifest + sync scripts | net-new IAM secret (never committed) |
CDN_URL_BASE | manifest script (optional) | override where the showroom loads assets from |
AWS_ENDPOINT_URL_S3 | manifest script (optional) | custom S3-compatible endpoint; omit for real AWS S3 |
No secrets are hardcoded anywhere — the helper reads only the two NEXT_PUBLIC_ vars; AWS
credentials live in the central .env and are passed to the scripts at runtime.
pnpm codebase add cdn — vendor src/lib/cdn.ts into the repo.NEXT_PUBLIC_CDN_DOMAIN=cdn.databayt.org and NEXT_PUBLIC_CDN_NAMESPACE=<product> to the
central .env (the namespace is required, or cdn.product() mis-keys this repo's media).pnpm tsx scripts/sync.ts cdn-inventory.txt to upload re-keyed objects to databayt-cdn.cdn.vendor / cdn.shared / cdn.product / cdn.catalog, in small PRs.CDN_BUCKET=databayt-cdn AWS_REGION=us-east-1 pnpm tsx scripts/build-cdn-manifest.ts and
confirm assets on /icons.200s from CloudFront, pnpm build green.remotePatterns; ship.cdn.vendor/shared/product/catalog) — no hardcoded cdn.databayt.org strings.NEXT_PUBLIC_CDN_DOMAIN and NEXT_PUBLIC_CDN_NAMESPACE set in the central .env./icons showroom.imagekit.io / cloudinary matches in source.aws:SourceArn; OAC (not OAI); ACM cert in us-east-1.On This Page
AssetsWhy a unified CDNThe URL scheme: four tiers1. Vendor mirror2. Shared primitives —icons / illustrations / animations3. Product namespace — hogwarts / souq / mkan / shifa / kun4. Content catalogKey-naming rulesCatalog & ClickViewHow any repo consumes the CDNThe /icons showroom — source of truthGenerating the manifestInfrastructure (net-new)Migration map: off ImageKit and Cloudinary1. Inventory2. Re-key3. Upload via sync.ts4. Swap call sites5. Verify6. DecommissionEnvironment variablesAdopt-per-repo runbookChecklist