diff --git a/.astro/collections/activities.schema.json b/.astro/collections/activities.schema.json deleted file mode 100644 index ced129e..0000000 --- a/.astro/collections/activities.schema.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "title": { - "type": "string", - "minLength": 2 - }, - "description": { - "type": "string", - "minLength": 10 - }, - "link": { - "type": "string" - }, - "color": { - "type": "string", - "pattern": "^#[0-9a-fA-F]{6}$" - }, - "order": { - "type": "integer", - "minimum": 1, - "maximum": 9007199254740991 - }, - "status": { - "type": "string", - "enum": [ - "active", - "ongoing", - "upcoming", - "completed" - ] - }, - "$schema": { - "type": "string" - } - }, - "required": [ - "title", - "description", - "color", - "order", - "status" - ] -} \ No newline at end of file diff --git a/.astro/collections/admins.schema.json b/.astro/collections/admins.schema.json deleted file mode 100644 index a8f3c38..0000000 --- a/.astro/collections/admins.schema.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 2, - "maxLength": 100 - }, - "image": { - "type": "string", - "format": "uri" - }, - "socials": { - "type": "array", - "items": { - "type": "object", - "properties": { - "platform": { - "type": "string", - "enum": [ - "x", - "linkedin", - "github", - "website", - "youtube", - "instagram", - "facebook", - "discord", - "slack" - ] - }, - "url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "platform", - "url" - ] - } - }, - "$schema": { - "type": "string" - } - }, - "required": [ - "name", - "image", - "socials" - ] -} \ No newline at end of file diff --git a/.astro/collections/meetups.schema.json b/.astro/collections/meetups.schema.json deleted file mode 100644 index 7011251..0000000 --- a/.astro/collections/meetups.schema.json +++ /dev/null @@ -1,283 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 2 - }, - "start": { - "type": "string", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2}$" - }, - "end": { - "type": "string", - "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}[+-]\\d{2}:\\d{2}$" - }, - "description": { - "type": "string", - "minLength": 10 - }, - "cover": { - "type": "string", - "format": "uri" - }, - "location": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 2 - }, - "map_url": { - "anyOf": [ - { - "type": "string", - "format": "uri" - }, - { - "type": "null" - } - ] - } - }, - "required": [ - "name" - ] - }, - "stream_url": { - "anyOf": [ - { - "type": "string", - "format": "uri" - }, - { - "type": "null" - } - ] - }, - "embed_stream": { - "default": false, - "type": "boolean" - }, - "registration_url": { - "anyOf": [ - { - "type": "string", - "format": "uri" - }, - { - "type": "null" - } - ] - }, - "speakers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 2 - }, - "title": { - "type": "string", - "minLength": 2 - }, - "bio": { - "type": "string", - "minLength": 10 - }, - "image": { - "type": "string", - "format": "uri" - }, - "talk_title": { - "type": "string", - "minLength": 2 - }, - "talk_description": { - "type": "string", - "minLength": 10 - }, - "slides_url": { - "anyOf": [ - { - "type": "string", - "format": "uri" - }, - { - "type": "null" - } - ] - }, - "recording_url": { - "anyOf": [ - { - "type": "string", - "format": "uri" - }, - { - "type": "null" - } - ] - }, - "socials": { - "type": "array", - "items": { - "type": "object", - "properties": { - "platform": { - "type": "string", - "enum": [ - "x", - "linkedin", - "github", - "website", - "youtube", - "instagram", - "facebook", - "discord", - "slack" - ] - }, - "url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "platform", - "url" - ] - } - } - }, - "required": [ - "name", - "title", - "bio", - "image", - "talk_title", - "talk_description" - ] - } - }, - "schedule": { - "type": "array", - "items": { - "type": "object", - "properties": { - "time": { - "type": "string", - "minLength": 3 - }, - "title": { - "type": "string", - "minLength": 2 - }, - "type": { - "type": "string", - "enum": [ - "networking", - "talk", - "panel", - "workshop", - "open_discussion", - "break" - ] - }, - "lead": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ] - }, - "resources": { - "type": "array", - "items": { - "type": "object", - "properties": { - "title": { - "type": "string", - "minLength": 2 - }, - "url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "title", - "url" - ] - } - } - }, - "required": [ - "time", - "title", - "type" - ] - } - }, - "photos": { - "type": "array", - "items": { - "type": "object", - "properties": { - "url": { - "type": "string", - "format": "uri" - }, - "type": { - "default": "image", - "type": "string", - "enum": [ - "image", - "folder" - ] - } - }, - "required": [ - "url" - ] - } - }, - "videos": { - "type": "array", - "items": { - "type": "object", - "properties": { - "title": { - "type": "string", - "minLength": 2 - }, - "embed_url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "title", - "embed_url" - ] - } - }, - "$schema": { - "type": "string" - } - }, - "required": [ - "name", - "start", - "end", - "description", - "cover", - "location" - ] -} \ No newline at end of file diff --git a/.astro/collections/partners.schema.json b/.astro/collections/partners.schema.json deleted file mode 100644 index f1f5d4c..0000000 --- a/.astro/collections/partners.schema.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "type": "object", - "properties": { - "name": { - "type": "string", - "minLength": 1 - }, - "logo": { - "type": "string", - "format": "uri" - }, - "url": { - "type": "string", - "format": "uri" - }, - "backgroundColor": { - "type": "string", - "pattern": "^#([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$" - }, - "$schema": { - "type": "string" - } - }, - "required": [ - "name", - "logo" - ] -} \ No newline at end of file diff --git a/.astro/collections/site.schema.json b/.astro/collections/site.schema.json deleted file mode 100644 index 96266cf..0000000 --- a/.astro/collections/site.schema.json +++ /dev/null @@ -1,472 +0,0 @@ -{ - "$schema": "https://json-schema.org/draft/2020-12/schema", - "anyOf": [ - { - "type": "array", - "items": { - "type": "object", - "properties": { - "community_slack_url": { - "type": "string", - "format": "uri" - }, - "paystack_url": { - "type": "string", - "format": "uri" - }, - "youtube_embed_url": { - "type": "string", - "format": "uri" - }, - "stats": { - "type": "array", - "items": { - "type": "object", - "properties": { - "value": { - "type": "string" - }, - "label": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": [ - "value", - "label" - ] - } - }, - "socials": { - "type": "array", - "items": { - "type": "object", - "properties": { - "platform": { - "type": "string", - "enum": [ - "x", - "linkedin", - "github", - "website", - "youtube", - "instagram", - "facebook", - "discord", - "slack" - ] - }, - "url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "platform", - "url" - ] - } - }, - "roles": { - "type": "array", - "items": { - "type": "string" - } - }, - "mission_section": { - "type": "object", - "properties": { - "eyebrow": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "body": { - "type": "string" - }, - "cta": { - "type": "string" - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "heading": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": [ - "heading", - "description" - ] - } - } - }, - "required": [ - "eyebrow", - "headline", - "body", - "cta", - "items" - ] - }, - "donate_section": { - "type": "object", - "properties": { - "eyebrow": { - "type": "string" - }, - "heading": { - "type": "string" - }, - "body": { - "type": "string" - }, - "cta_text": { - "type": "string" - }, - "uses_header": { - "type": "string" - }, - "uses_items": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "eyebrow", - "heading", - "body", - "cta_text", - "uses_header", - "uses_items" - ] - }, - "hero": { - "type": "object", - "properties": { - "eyebrow": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "cta_primary": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "color": { - "type": "string", - "enum": [ - "pink", - "outline", - "white", - "yellow" - ] - } - }, - "required": [ - "text", - "color" - ] - }, - "cta_secondary": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "color": { - "type": "string", - "enum": [ - "pink", - "outline", - "white", - "yellow" - ] - } - }, - "required": [ - "text", - "color" - ] - }, - "video_label": { - "type": "string" - }, - "video_live": { - "type": "string" - } - }, - "required": [ - "eyebrow", - "headline", - "cta_primary", - "cta_secondary", - "video_label", - "video_live" - ] - } - }, - "required": [ - "community_slack_url", - "paystack_url", - "youtube_embed_url", - "stats", - "socials", - "roles", - "mission_section", - "donate_section", - "hero" - ] - } - }, - { - "type": "object", - "properties": { - "$schema": { - "type": "string" - } - }, - "additionalProperties": { - "type": "object", - "properties": { - "community_slack_url": { - "type": "string", - "format": "uri" - }, - "paystack_url": { - "type": "string", - "format": "uri" - }, - "youtube_embed_url": { - "type": "string", - "format": "uri" - }, - "stats": { - "type": "array", - "items": { - "type": "object", - "properties": { - "value": { - "type": "string" - }, - "label": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": [ - "value", - "label" - ] - } - }, - "socials": { - "type": "array", - "items": { - "type": "object", - "properties": { - "platform": { - "type": "string", - "enum": [ - "x", - "linkedin", - "github", - "website", - "youtube", - "instagram", - "facebook", - "discord", - "slack" - ] - }, - "url": { - "type": "string", - "format": "uri" - } - }, - "required": [ - "platform", - "url" - ] - } - }, - "roles": { - "type": "array", - "items": { - "type": "string" - } - }, - "mission_section": { - "type": "object", - "properties": { - "eyebrow": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "body": { - "type": "string" - }, - "cta": { - "type": "string" - }, - "items": { - "type": "array", - "items": { - "type": "object", - "properties": { - "heading": { - "type": "string" - }, - "description": { - "type": "string" - } - }, - "required": [ - "heading", - "description" - ] - } - } - }, - "required": [ - "eyebrow", - "headline", - "body", - "cta", - "items" - ] - }, - "donate_section": { - "type": "object", - "properties": { - "eyebrow": { - "type": "string" - }, - "heading": { - "type": "string" - }, - "body": { - "type": "string" - }, - "cta_text": { - "type": "string" - }, - "uses_header": { - "type": "string" - }, - "uses_items": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "required": [ - "eyebrow", - "heading", - "body", - "cta_text", - "uses_header", - "uses_items" - ] - }, - "hero": { - "type": "object", - "properties": { - "eyebrow": { - "type": "string" - }, - "headline": { - "type": "string" - }, - "cta_primary": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "color": { - "type": "string", - "enum": [ - "pink", - "outline", - "white", - "yellow" - ] - } - }, - "required": [ - "text", - "color" - ] - }, - "cta_secondary": { - "type": "object", - "properties": { - "text": { - "type": "string" - }, - "color": { - "type": "string", - "enum": [ - "pink", - "outline", - "white", - "yellow" - ] - } - }, - "required": [ - "text", - "color" - ] - }, - "video_label": { - "type": "string" - }, - "video_live": { - "type": "string" - } - }, - "required": [ - "eyebrow", - "headline", - "cta_primary", - "cta_secondary", - "video_label", - "video_live" - ] - } - }, - "required": [ - "community_slack_url", - "paystack_url", - "youtube_embed_url", - "stats", - "socials", - "roles", - "mission_section", - "donate_section", - "hero" - ] - } - } - ] -} \ No newline at end of file diff --git a/.astro/content-assets.mjs b/.astro/content-assets.mjs deleted file mode 100644 index 83e3505..0000000 --- a/.astro/content-assets.mjs +++ /dev/null @@ -1,4 +0,0 @@ - - -export default new Map([]); - \ No newline at end of file diff --git a/.astro/content-modules.mjs b/.astro/content-modules.mjs deleted file mode 100644 index 2b8b823..0000000 --- a/.astro/content-modules.mjs +++ /dev/null @@ -1 +0,0 @@ -export default new Map(); \ No newline at end of file diff --git a/.astro/content.d.ts b/.astro/content.d.ts deleted file mode 100644 index 67daef2..0000000 --- a/.astro/content.d.ts +++ /dev/null @@ -1,195 +0,0 @@ -declare module 'astro:content' { - export interface RenderResult { - Content: import('astro/runtime/server/index.js').AstroComponentFactory; - headings: import('astro').MarkdownHeading[]; - remarkPluginFrontmatter: Record; - } - interface Render { - '.md': Promise; - } - - export interface RenderedContent { - html: string; - metadata?: { - imagePaths: Array; - [key: string]: unknown; - }; - } - - type Flatten = T extends { [K: string]: infer U } ? U : never; - - export type CollectionKey = keyof DataEntryMap; - export type CollectionEntry = Flatten; - - type AllValuesOf = T extends any ? T[keyof T] : never; - - export type ReferenceDataEntry< - C extends CollectionKey, - E extends keyof DataEntryMap[C] = string, - > = { - collection: C; - id: E; - }; - - export type ReferenceLiveEntry = { - collection: C; - id: string; - }; - - export function getCollection>( - collection: C, - filter?: (entry: CollectionEntry) => entry is E, - ): Promise; - export function getCollection( - collection: C, - filter?: (entry: CollectionEntry) => unknown, - ): Promise[]>; - - export function getLiveCollection( - collection: C, - filter?: LiveLoaderCollectionFilterType, - ): Promise< - import('astro').LiveDataCollectionResult, LiveLoaderErrorType> - >; - - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >( - entry: ReferenceDataEntry, - ): E extends keyof DataEntryMap[C] - ? Promise - : Promise | undefined>; - export function getEntry< - C extends keyof DataEntryMap, - E extends keyof DataEntryMap[C] | (string & {}), - >( - collection: C, - id: E, - ): E extends keyof DataEntryMap[C] - ? string extends keyof DataEntryMap[C] - ? Promise | undefined - : Promise - : Promise | undefined>; - export function getLiveEntry( - collection: C, - filter: string | LiveLoaderEntryFilterType, - ): Promise, LiveLoaderErrorType>>; - - /** Resolve an array of entry references from the same collection */ - export function getEntries( - entries: ReferenceDataEntry[], - ): Promise[]>; - - export function render( - entry: DataEntryMap[C][string], - ): Promise; - - export function reference< - C extends - | keyof DataEntryMap - // Allow generic `string` to avoid excessive type errors in the config - // if `dev` is not running to update as you edit. - // Invalid collection names will be caught at build time. - | (string & {}), - >( - collection: C, - ): import('astro/zod').ZodPipe< - import('astro/zod').ZodString, - import('astro/zod').ZodTransform< - C extends keyof DataEntryMap - ? { - collection: C; - id: string; - } - : never, - string - > - >; - - type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T; - type InferEntrySchema = import('astro/zod').infer< - ReturnTypeOrOriginal['schema']> - >; - type ExtractLoaderConfig = T extends { loader: infer L } ? L : never; - type InferLoaderSchema< - C extends keyof DataEntryMap, - L = ExtractLoaderConfig, - > = L extends { schema: import('astro/zod').ZodSchema } - ? import('astro/zod').infer - : any; - - type DataEntryMap = { - "activities": Record; - rendered?: RenderedContent; - filePath?: string; -}>; -"admins": Record; - rendered?: RenderedContent; - filePath?: string; -}>; -"meetups": Record; - rendered?: RenderedContent; - filePath?: string; -}>; -"partners": Record; - rendered?: RenderedContent; - filePath?: string; -}>; -"site": Record; - rendered?: RenderedContent; - filePath?: string; -}>; - - }; - - type ExtractLoaderTypes = T extends import('astro/loaders').LiveLoader< - infer TData, - infer TEntryFilter, - infer TCollectionFilter, - infer TError - > - ? { data: TData; entryFilter: TEntryFilter; collectionFilter: TCollectionFilter; error: TError } - : { data: never; entryFilter: never; collectionFilter: never; error: never }; - type ExtractEntryFilterType = ExtractLoaderTypes['entryFilter']; - type ExtractCollectionFilterType = ExtractLoaderTypes['collectionFilter']; - type ExtractErrorType = ExtractLoaderTypes['error']; - type ExtractDataType = ExtractLoaderTypes['data']; - - type LiveLoaderDataType = - LiveContentConfig['collections'][C]['schema'] extends undefined - ? ExtractDataType - : import('astro/zod').infer< - Exclude - >; - type LiveLoaderEntryFilterType = - ExtractEntryFilterType; - type LiveLoaderCollectionFilterType = - ExtractCollectionFilterType; - type LiveLoaderErrorType = ExtractErrorType< - LiveContentConfig['collections'][C]['loader'] - >; - - export type ContentConfig = typeof import("../src/content.config.js"); - export type LiveContentConfig = never; -} diff --git a/.astro/data-store.json b/.astro/data-store.json deleted file mode 100644 index 5fdc1d2..0000000 --- a/.astro/data-store.json +++ /dev/null @@ -1 +0,0 @@ -[["Map",1,2,53,54,211,212,493,494,501,502,557,558],"activities",["Map",3,4,13,14,24,25,34,35,44,45],"chale-code",{"id":3,"data":5,"filePath":11,"digest":12},{"title":6,"description":7,"color":8,"order":9,"status":10},"Chale Code","Our mentorship program for up-and-coming developers. Structured guidance from experienced engineers in the community.","#34d399",3,"active","content/activities/chale-code.yaml","b11060e5c3673514","echo-podcast",{"id":13,"data":15,"filePath":22,"digest":23},{"title":16,"description":17,"link":18,"color":19,"order":20,"status":21},"Echo Podcast","Stories and lessons from African builders. Real experiences from engineers, founders, and product makers on the continent.","https://open.spotify.com/show/5uaPVqhudVOgS3n40Vkh4H","#22d3ee",2,"ongoing","content/activities/echo-podcast.yaml","d32f7316f24235c6","hackathon-2025",{"id":24,"data":26,"filePath":32,"digest":33},{"title":27,"description":28,"color":29,"order":30,"status":31},"DevCongress Unicef Hack25","A week of collaboration and creative problem-solving. Teams build real products in 48 hours.","#fb7185",1,"completed","content/activities/hackathon-2025.yaml","d3dbdd3cd4f034bf","how-to-build",{"id":34,"data":36,"filePath":42,"digest":43},{"title":37,"description":38,"link":39,"color":40,"order":41,"status":21},"#HowToBuild","Guides for creators and founders shipping real products. Practical knowledge on taking ideas from zero to production.","https://x.com/hashtag/HowToBuild?src=hashtag_click","#fbbf24",5,"content/activities/how-to-build.yaml","319608b851ffaceb","what-are-you-building",{"id":44,"data":46,"filePath":51,"digest":52},{"title":47,"description":48,"color":49,"order":50,"status":21},"What Are You Building?","A showcase of projects from our members. Share what you are working on and get feedback from the community.","#c084fc",4,"content/activities/what-are-you-building.yaml","1f1f92eff0c57ddd","admins",["Map",55,56,72,73,84,85,94,95,108,109,120,121,137,138,147,148,161,162,175,176,187,188,201,202],"andrew-smith",{"id":55,"data":57,"filePath":70,"digest":71},{"name":58,"image":59,"socials":60},"Andrew Smith","https://pbs.twimg.com/profile_images/1686721836795432960/Ghu7dKZC_400x400.jpg",[61,64,67],{"platform":62,"url":63},"x","https://twitter.com/silentworks",{"platform":65,"url":66},"website","https://donielsmith.com",{"platform":68,"url":69},"github","https://github.com/silentworks","content/admins/andrew-smith.yaml","03cea24231c1709c","anthony-acquah",{"id":72,"data":74,"filePath":82,"digest":83},{"name":75,"image":76,"socials":77},"Anthony Acquah","https://pbs.twimg.com/profile_images/3248556771/feb8ad6b5f403e70ea321d17b80df232_400x400.png",[78,80],{"platform":62,"url":79},"https://twitter.com/tony_mobster",{"platform":65,"url":81},"https://about.me/anthonyacquah","content/admins/anthony-acquah.yaml","e1fc834d78e3fe91","blossom-dugbatey",{"id":84,"data":86,"filePath":92,"digest":93},{"name":87,"image":88,"socials":89},"Blossom Dugbatey","https://ca.slack-edge.com/T0A0T7A5Q-U02LQJ83N9H-42650d9d2b97-512",[90],{"platform":62,"url":91},"https://x.com/DedeCodex","content/admins/blossom-dugbatey.yaml","b71a9d14bc7458bc","bubunyo-nyavor",{"id":94,"data":96,"filePath":106,"digest":107},{"name":97,"image":98,"socials":99},"Bubunyo Nyavor","https://pbs.twimg.com/media/FHvsk2MXMAQBovS?format=jpg&name=large",[100,102,104],{"platform":62,"url":101},"https://twitter.com/KiddBubu",{"platform":65,"url":103},"https://5error.com",{"platform":68,"url":105},"https://github.com/bubunyo","content/admins/bubunyo-nyavor.yaml","5fa8bc37ac91ad18","claude-ayitey",{"id":108,"data":110,"filePath":118,"digest":119},{"name":111,"image":112,"socials":113},"Claude Ayitey","https://api.navii.dev/avatar/milo?size=192&animated=1",[114,116],{"platform":62,"url":115},"https://twitter.com/mrayitey",{"platform":65,"url":117},"https://ayitey.com","content/admins/claude-ayitey.yaml","e7a8790dc4e29aa8","edem-kumodzi",{"id":120,"data":122,"filePath":135,"digest":136},{"name":123,"image":124,"socials":125},"Edem Kumodzi","https://avatars.githubusercontent.com/u/676790?v=4",[126,128,130,133],{"platform":62,"url":127},"https://twitter.com/edemkumodzi",{"platform":65,"url":129},"https://edemkumodzi.com",{"platform":131,"url":132},"linkedin","https://www.linkedin.com/in/edemkumodzi",{"platform":68,"url":134},"https://github.com/edem","content/admins/edem-kumodzi.yaml","a2e10a7979ea5073","elorm-adjaho",{"id":137,"data":139,"filePath":145,"digest":146},{"name":140,"image":141,"socials":142},"Elorm Adjaho","https://images.squarespace-cdn.com/content/v1/64c1ced9e4d636753f2d62a9/6c6bc5a8-d5ac-4603-8620-8d7a501cae5f/Elorm+Adjaho+_+IWL+Fellow.jpg",[143],{"platform":62,"url":144},"https://twitter.com/elormm_a","content/admins/elorm-adjaho.yaml","cd9882ad2f2adb35","francis-addai",{"id":147,"data":149,"filePath":159,"digest":160},{"name":150,"image":151,"socials":152},"Francis Addai","https://pbs.twimg.com/profile_images/1278660776232996864/YouNWmIr_400x400.jpg",[153,155,157],{"platform":62,"url":154},"https://twitter.com/faddai",{"platform":65,"url":156},"https://francisaddai.com",{"platform":68,"url":158},"https://github.com/francisaddai","content/admins/francis-addai.yaml","bfa15b76dbc718f3","nathan-sodja",{"id":161,"data":163,"filePath":173,"digest":174},{"name":164,"image":165,"socials":166},"Nathan Sodja","https://ca.slack-edge.com/T0A0T7A5Q-U01NAPY9TEC-f92ae3063f27-512",[167,169,171],{"platform":62,"url":168},"https://x.com/me_souljah",{"platform":65,"url":170},"https://hashnode.com/@nate233",{"platform":68,"url":172},"https://github.com/NateOs","content/admins/nathan-sodja.yaml","d7928e44d6152a9c","saviour-kirk",{"id":175,"data":177,"filePath":185,"digest":186},{"name":178,"image":179,"socials":180},"Saviour Kirk Agbenyegah","https://api.navii.dev/avatar/yumi?size=192&animated=1",[181,183],{"platform":62,"url":182},"https://twitter.com/savekirk",{"platform":131,"url":184},"https://www.linkedin.com/in/savekirk","content/admins/saviour-kirk.yaml","dfeb34e8b9732be4","stefan-froelich",{"id":187,"data":189,"filePath":199,"digest":200},{"name":190,"image":191,"socials":192},"Stefan Froelich","https://pbs.twimg.com/profile_images/1875679658647138304/w--j-PK8_400x400.jpg",[193,195,197],{"platform":62,"url":194},"https://x.com/TheDumbTechGuy",{"platform":65,"url":196},"https://thedumbtechguy.com",{"platform":131,"url":198},"https://www.linkedin.com/in/stefanfroelich","content/admins/stefan-froelich.yaml","517ef62ee1547fec","yaw-boakye",{"id":201,"data":203,"filePath":209,"digest":210},{"name":204,"image":205,"socials":206},"Yaw Boakye","https://pbs.twimg.com/profile_images/1680929162616291329/_jCSwpti_400x400.jpg",[207],{"platform":62,"url":208},"https://twitter.com/ejnbo","content/admins/yaw-boakye.yaml","242d14ddf4c063ea","meetups",["Map",213,214,264,265,309,310,350,351,413,414],"100-january-2026",{"id":213,"data":215,"filePath":262,"digest":263},{"name":216,"start":217,"end":218,"description":219,"cover":220,"location":221,"stream_url":224,"embed_stream":225,"registration_url":226,"speakers":227,"schedule":228,"photos":257,"videos":261},"DevCongress January Meetup","2026-01-31T10:00:00+00:00","2026-01-31T15:00:00+00:00","DevCongress is a community of tech enthusiasts passionate about growing a strong tech ecosystem in Ghana. Our monthly meetups are all about sharing knowledge, learning from each other, and building a supportive developer community. Our key focus this year is SECURITY and AI.\nEach meetup includes tech talks and hands-on workshops, and you get to choose the format that works best for you and your topic.\nFeaturing talks on Claude Code and the OWASP Top 10: 2025 release.\n","https://pbs.twimg.com/media/G-tCqAnWIAA3ny4?format=jpg&name=large",{"name":222,"map_url":223},"buro.gh, Accra","https://maps.app.goo.gl/n8u6C6TgdtW35db67",null,false,"https://luma.com/70danu1w",[],[229,234,240,244,249,253],{"time":230,"title":231,"type":232,"lead":224,"resources":233},"10:00 AM","Doors open & networking","networking",[],{"time":235,"title":236,"type":237,"lead":238,"resources":239},"10:30 AM","Talk: Claude Code When You Don't Know You're (Yet)","talk","Philip Narteh",[],{"time":241,"title":242,"type":237,"lead":224,"resources":243},"11:30 AM","Talk: OWASP Top 10: 2025 Release",[],{"time":245,"title":246,"type":247,"lead":224,"resources":248},"12:30 PM","System Design","open_discussion",[],{"time":250,"title":251,"type":237,"lead":224,"resources":252},"1:30 PM","Product & tool demos",[],{"time":254,"title":255,"type":232,"lead":224,"resources":256},"2:00 PM","Networking & close",[],[258],{"url":259,"type":260},"https://drive.google.com/drive/folders/1jEW8J7xMFu0o1YocISeLbVRy5F5i2gxd","folder",[],"content/meetups/100-january-2026.yaml","ee69fbc6ac8adc64","200-february-2026",{"id":264,"data":266,"filePath":307,"digest":308},{"name":267,"start":268,"end":269,"description":270,"cover":271,"location":272,"stream_url":224,"embed_stream":225,"registration_url":275,"speakers":276,"schedule":277,"photos":294,"videos":306},"DevCongress February Meetup","2026-02-28T10:00:00+00:00","2026-02-28T15:00:00+00:00","DevCongress is a tech community passionate about growing a strong tech ecosystem in Ghana. This meetup was co-hosted with Blossom, featuring tech talks, hands-on workshops, and showcases of applications built by members of the Ghanaian tech ecosystem. We wrapped up the event with pizza, drinks, and networking.\n","https://pbs.twimg.com/media/HAGkdjbWEAAJFba?format=jpg&name=large",{"name":273,"map_url":274},"Nyansa Square.","https://maps.app.goo.gl/NbaFFBcy89Dehq8VA","https://luma.com/frh11t0y",[],[278,280,283,287,289,291],{"time":230,"title":231,"type":232,"lead":224,"resources":279},[],{"time":235,"title":281,"type":237,"lead":224,"resources":282},"Tech talks",[],{"time":241,"title":284,"type":285,"lead":224,"resources":286},"Hands-on workshops","workshop",[],{"time":245,"title":246,"type":247,"lead":224,"resources":288},[],{"time":250,"title":251,"type":237,"lead":224,"resources":290},[],{"time":254,"title":292,"type":232,"lead":224,"resources":293},"Pizza, drinks & networking",[],[295,298,300,302,304],{"url":296,"type":297},"https://pbs.twimg.com/media/HCaAt7HWsAAWOcT?format=jpg&name=large","image",{"url":299,"type":297},"https://pbs.twimg.com/media/HCaAt7rbwAAx2qn?format=jpg&name=large",{"url":301,"type":297},"https://pbs.twimg.com/media/HCaAt7JXwAA4Hi8?format=jpg&name=large",{"url":303,"type":297},"https://pbs.twimg.com/media/HCaAt7HXUAAX75z?format=jpg&name=large",{"url":305,"type":260},"https://drive.google.com/drive/folders/1bowyXOaJiRpZ5XM6SprzJfJ85VqfUrYi",[],"content/meetups/200-february-2026.yaml","2eb27df1e9435c20","300-march-2026",{"id":309,"data":311,"filePath":348,"digest":349},{"name":312,"start":313,"end":314,"description":315,"cover":296,"location":316,"stream_url":224,"embed_stream":225,"registration_url":319,"speakers":320,"schedule":321,"photos":346,"videos":347},"DevCongress March Meetup","2026-03-28T10:00:00+00:00","2026-03-28T15:00:00+00:00","DevCongress Meetups are builder-focused gatherings for developers, engineers, and tech enthusiasts who want to learn from real-world experiences and connect with others building in the ecosystem.\nFeaturing a tech talk on memory consistency and cache coherence, workshops, a hardware session, system design discussion, product demos, a Kahoot session, and pizza & networking.\n",{"name":317,"map_url":318},"Fido, Opposite SSNIT Guest House, Julius Nyerere Rd, Accra","https://www.google.com/maps/search/?api=1&query=5.570918%2C-0.18906119999999998","https://luma.com/jf8pjncl",[],[322,324,327,330,334,336,339,342],{"time":230,"title":231,"type":232,"lead":224,"resources":323},[],{"time":235,"title":325,"type":237,"lead":224,"resources":326},"Tech Talk: Memory Consistency & Cache Coherence",[],{"time":241,"title":328,"type":285,"lead":224,"resources":329},"Workshops",[],{"time":331,"title":332,"type":285,"lead":224,"resources":333},"12:00 PM","Hardware Session",[],{"time":245,"title":246,"type":247,"lead":224,"resources":335},[],{"time":250,"title":337,"type":237,"lead":224,"resources":338},"Product Demos",[],{"time":254,"title":340,"type":247,"lead":224,"resources":341},"Kahoot Session",[],{"time":343,"title":344,"type":232,"lead":224,"resources":345},"2:30 PM","Pizza & Networking",[],[],[],"content/meetups/300-march-2026.yaml","0167a3178cc4a175","400-april-2026",{"id":350,"data":352,"filePath":411,"digest":412},{"name":353,"start":354,"end":355,"description":356,"cover":357,"location":358,"stream_url":224,"embed_stream":225,"registration_url":359,"speakers":360,"schedule":361,"photos":381,"videos":410},"DevCongress April Meetup","2026-04-25T10:00:00+00:00","2026-04-25T15:00:00+00:00","DevCongress Meetups are builder-focused gatherings for developers, engineers, and tech enthusiasts who want to learn from real-world experiences and connect with others building in the ecosystem.\nFeaturing a tech talk on memory consistency and cache coherence, a design session with UXDerrick, system design discussion, product/tool demos, a Kahoot session, and pizza & networking.\n","https://pbs.twimg.com/media/HCLwbPBXYAAzGdM?format=jpg&name=large",{"name":317,"map_url":318},"https://lu.ma/qqx9uk6u",[],[362,364,367,371,373,377,379],{"time":230,"title":231,"type":232,"lead":224,"resources":363},[],{"time":235,"title":365,"type":237,"lead":224,"resources":366},"Tech Talk: Memory Consistency & Cache Coherence (cont'd)",[],{"time":241,"title":368,"type":237,"lead":369,"resources":370},"Design Session with UXDerrick","UXDerrick",[],{"time":331,"title":246,"type":247,"lead":224,"resources":372},[],{"time":374,"title":375,"type":237,"lead":224,"resources":376},"12:45 PM","Product & Tool Demos",[],{"time":250,"title":340,"type":247,"lead":224,"resources":378},[],{"time":254,"title":344,"type":232,"lead":224,"resources":380},[],[382,384,386,388,390,392,394,396,398,400,402,404,406,408],{"url":383,"type":297},"https://pbs.twimg.com/media/HGwrt-RagAAgX_-?format=jpg&name=large",{"url":385,"type":297},"https://pbs.twimg.com/media/HGwm9MKbQAAwyPr?format=jpg&name=large",{"url":387,"type":297},"https://pbs.twimg.com/media/HGwYEdhakAAvmCm?format=jpg&name=large",{"url":389,"type":297},"https://pbs.twimg.com/media/HGwMz61a0AAor9d?format=jpg&name=large",{"url":391,"type":297},"https://pbs.twimg.com/media/HGwC7dEbMAAU9os?format=jpg&name=large",{"url":393,"type":297},"https://pbs.twimg.com/media/HGv0RwAaAAAfNVH?format=jpg&name=large",{"url":395,"type":297},"https://pbs.twimg.com/media/HEgj8EFWgAAtqPn?format=jpg&name=large",{"url":397,"type":297},"https://pbs.twimg.com/media/HEgjh9YXcAAubIw?format=jpg&name=large",{"url":399,"type":297},"https://pbs.twimg.com/media/HEge8jJa0AA6Lg9?format=jpg&name=large",{"url":401,"type":297},"https://pbs.twimg.com/media/HEgT9zma8AAX3tn?format=jpg&name=large",{"url":403,"type":297},"https://pbs.twimg.com/media/HEgSynGbIAAuJLn?format=jpg&name=large",{"url":405,"type":297},"https://pbs.twimg.com/media/HEgAxq1WQAAb8bc?format=jpg&name=large",{"url":407,"type":297},"https://pbs.twimg.com/media/HEf5kkRbEAAyxIl?format=jpg&name=large",{"url":409,"type":297},"https://pbs.twimg.com/media/HEfovhhakAAE4Fl?format=jpg&name=large",[],"content/meetups/400-april-2026.yaml","870a5d69b02dc314","500-may-2026",{"id":413,"data":415,"filePath":491,"digest":492},{"name":416,"start":417,"end":418,"description":419,"cover":420,"location":421,"stream_url":422,"embed_stream":225,"registration_url":423,"speakers":424,"schedule":425,"photos":489,"videos":490},"DevCongress May Meetup","2026-05-30T10:00:00+00:00","2026-05-30T16:00:00+00:00","Featuring product demos from Sankofa, OpenMirror, and JestryAI, a microcontroller workshop with Manny, a session from Old Mutual, system design discussion, FIDCON partnership announcement, and a panel discussion.\n","https://pbs.twimg.com/media/HG_xUr-WIAABl-e?format=jpg&name=medium",{"name":222,"map_url":223},"https://x.com/i/broadcasts/1aKbddMWOjaJX","https://lu.ma/3b0il40a",[],[426,428,432,439,443,446,453,457,463,471,478],{"time":230,"title":231,"type":232,"lead":224,"resources":427},[],{"time":429,"title":430,"type":237,"lead":224,"resources":431},"11:00 AM","Welcome address",[],{"time":433,"title":434,"type":237,"lead":224,"resources":435},"11:10 AM","Product Demo: Sankofa",[436],{"title":437,"url":438},"Website","https://sankofa.dev",{"time":241,"title":440,"type":285,"lead":441,"resources":442},"Manny — Demo with Microcontrollers","@willofdaedalus",[],{"time":245,"title":444,"type":237,"lead":224,"resources":445},"Product Demo: OpenMirror",[],{"time":447,"title":448,"type":237,"lead":224,"resources":449},"12:50 PM","Old Mutual",[450],{"title":451,"url":452},"Startup Resources","https://ecosystem.oldmutual.com.gh",{"time":454,"title":455,"type":237,"lead":224,"resources":456},"1:25 PM","FIDCON partnership announcement & promo code",[],{"time":458,"title":459,"type":237,"lead":224,"resources":460},"1:35 PM","Product Demo: JestryAI",[461],{"title":437,"url":462},"https://www.jestryai.com/",{"time":464,"title":465,"type":247,"lead":466,"resources":467},"1:50 PM","System Design Session (Blacko's Detty December Concert)","Tonny-Bright",[468],{"title":469,"url":470},"Problem Discription","https://docs.google.com/document/d/1qGhdc7L_PoCPuEGaheQ5RT5C-ML9-BzzfVQjmKTfSTQ/edit?usp=sharing",{"time":472,"title":473,"type":237,"lead":224,"resources":474},"2:50 PM","DevCongress Support Announcement",[475],{"title":476,"url":477},"Feedback Form","https://docs.google.com/forms/d/e/1FAIpQLSco-46QfOtkU70eOoFmskRa5TPLBGoVI34KudArxmrzO3dFdw/viewform",{"time":479,"title":480,"type":481,"lead":224,"resources":482},"3:10 PM","Panel Discussion - The New NITA Bill","panel",[483,486],{"title":484,"url":485},"NATIONAL INFORMATION TECHNOLOGY AUTHORITY BILL, 2025","https://nita.gov.gh/wp-content/uploads/2025/NITA-2008-act-2025-1.pdf",{"title":487,"url":488},"NITA REGULATORY | IT SERVICE PROVIDER REGISTRATION (FEES)","https://regulatory.nita.gov.gh/portal/regulatory/registration-of-it-firms",[],[],"content/meetups/500-may-2026.yaml","1e5243f6e1b5bd65","meta::meta",["Map",495,496,497,498,499,500],"astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"site\":\"https://devcongress.org\",\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"dangerouslyProcessSVG\":false,\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"processor\":{\"name\":\"unified\",\"options\":{\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{}}}},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"csp\":false,\"actionBodySizeLimit\":1048576,\"serverIslandBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"prerenderConflictBehavior\":\"warn\",\"experimental\":{\"advancedRouting\":false,\"clientPrerender\":false,\"contentIntellisense\":false,\"chromeDevtoolsWorkspace\":false,\"rustCompiler\":false,\"queuedRendering\":{\"enabled\":false}},\"legacy\":{\"collectionsBackwardsCompat\":false}}","astro-version","6.4.2","content-config-digest","e3c1368001b569a1","partners",["Map",503,504,512,513,521,522,530,531,539,540,548,549],"fido",{"id":503,"data":505,"filePath":510,"digest":511},{"name":506,"logo":507,"url":508,"backgroundColor":509},"Fido Credit","https://cdn.prod.website-files.com/62fa16d8d83816b0fc5defc4/62fcf5fdb02a38631df13edb_footer_logo.svg","https://gh.fido.money/","#d6086b","content/partners/fido.yaml","5b128ec983e6ea16","kweku_tech",{"id":512,"data":514,"filePath":519,"digest":520},{"name":515,"logo":516,"url":517,"backgroundColor":518},"Kweku Tech Media","https://www.kweku.tech/_next/image?url=%2Flogo.svg&w=256&q=75","https://kweku.tech","#070d0d","content/partners/kweku_tech.yaml","e8c7363657c5fc75","mest",{"id":521,"data":523,"filePath":528,"digest":529},{"name":524,"logo":525,"url":526,"backgroundColor":527},"MEST Africa","https://meltwater.org/wp-content/uploads/2024/01/MEST-Logo_landscape_03-e1704132329210-300x49.png","https://meltwater.org/","#ffffff","content/partners/mest.yaml","3ab53258ae155d60","old-mutual",{"id":530,"data":532,"filePath":537,"digest":538},{"name":533,"logo":534,"url":535,"backgroundColor":536},"Old Mutual Insurance Ltd.","https://xplorio.com/xplorio/categories/28627/OM_Logo_Horizonal_Reverse_on_Vignette_RGB_1583910489.jpg?width=960&height=440","https://www.oldmutual.com/","#60b84888","content/partners/old-mutual.yaml","340abccde4b94deb","paystack",{"id":539,"data":541,"filePath":546,"digest":547},{"name":542,"logo":543,"url":544,"backgroundColor":545},"Paystack","https://cdn-assets-cloud.frontify.com/s3/frontify-cloud-files-us/eyJwYXRoIjoiZnJvbnRpZnlcL2FjY291bnRzXC8yYVwvMTQxNzczXC9wcm9qZWN0c1wvMTc4NjE0XC9hc3NldHNcL2E5XC8zNTI0MTM2XC9jYmJkNzA1OTEyN2NlOGU3ZDI5ZDM5NmJkMzhmMzkwNi0xNTY5MjE3MjIzLnBuZyJ9:frontify:xd65O1_BCk88mGEkjq6maiXPQH5Ol5Vhn97tbY1vl0c?width=1600&format=webp&quality=100","https://paystack.com/","#f1fef4f2","content/partners/paystack.yaml","c589d5711904ae48","unicef",{"id":548,"data":550,"filePath":555,"digest":556},{"name":551,"logo":552,"url":553,"backgroundColor":554},"UNICEF Ghana","https://www.unicef.org/ghana/sites/unicef.org.ghana/files/styles/logo/public/English_23.png.webp?itok=TAurVHy1","https://www.unicef.org/ghana/","#008bbf","content/partners/unicef.yaml","eaf47158df9eab86","site",["Map",557,559],{"id":557,"data":560,"filePath":648},{"community_slack_url":561,"paystack_url":562,"youtube_embed_url":563,"stats":564,"socials":573,"roles":589,"mission_section":605,"donate_section":626,"hero":637},"https://devcongress-community.slack.com/join/shared_invite/zt-3elxv0f0y-U6JoK8Al4ExQp8ERaS8uwg#/shared-invite/email","https://paystack.shop/pay/devcongress-meetup","https://www.youtube-nocookie.com/embed/vNWWGWXjybg?rel=0&modestbranding=1&playsinline=1",[565,569],{"value":566,"label":567,"description":568},"6000+","Community Members","Developers, Designers, Founders, Hackers and Makers across Africa.",{"value":570,"label":571,"description":572},"10+","Years","Building Community since 2015.",[574,576,578,580,583,586],{"platform":131,"url":575},"https://www.linkedin.com/company/devcongress",{"platform":62,"url":577},"https://x.com/devcongress",{"platform":68,"url":579},"https://github.com/devcongress",{"platform":581,"url":582},"youtube","https://youtube.com/devcongress",{"platform":584,"url":585},"facebook","https://facebook.com/devcongress",{"platform":587,"url":588},"instagram","https://www.instagram.com/devcongress/",[590,591,592,593,594,595,596,597,598,599,600,601,602,603,604],"Software Engineer","Product Manager","UX Designer","Data Scientist","DevOps Engineer","Mobile Developer","Frontend Developer","Backend Engineer","QA Engineer","Tech Lead","Founder","Marketer","Legal Advisor","Sales Professional","System Architect",{"eyebrow":606,"headline":607,"body":608,"cta":609,"items":610},"Mission","We exist because Africa's builders deserve a community that takes them *seriously*.","DevCongress is a movement. No paywalls, no gatekeeping — just builders helping builders grow across Africa and beyond.","Join the community",[611,614,617,620,623],{"heading":612,"description":613},"Build capacity & confidence through community led *mentorship*.","Over 500+ professionals upskilled through mentorship, events, and hands-on feedback.",{"heading":615,"description":616},"Expose tech talents to a rich array of *resources*.","30+ community sessions, 100+ shared resources, and growing.",{"heading":618,"description":619},"Contribute to innovative and community-driven projects that create *real impact*.","Contributed to 10+ community-led tools powering innovation across Africa.",{"heading":621,"description":622},"Harness the collective strength of community to solve *real problems*.","From solo learners to startup founders, we connect and grow together.",{"heading":624,"description":625},"Build the *changemakers* who shape a nation's technology policy & future.","From community organising to national policy discussions, DevCongress members are agents of change — shaping the future of technology and society across Africa.",{"eyebrow":627,"heading":628,"body":629,"cta_text":630,"uses_header":631,"uses_items":632},"Support","Keep DevCongress running.","DevCongress is community-funded without the strings of corporate backing. Your contribution keeps the lights on and the community growing.","Donate via Paystack","Your support funds",[633,634,635,636],"Monthly meetups across Ghana","Dedicated Support Programs","Community Tools and Shared Resources","Critical Infrastructure to Run the Community",{"eyebrow":638,"headline":639,"cta_primary":640,"cta_secondary":643,"video_label":646,"video_live":647},"Africa's tech community","Where Africa's builders connect, collaborate and grow.",{"text":641,"color":642},"Join us on Slack","pink",{"text":644,"color":645},"Support the Mission","outline","dev:congress{}; — community highlight","● Live Community","content/site.yaml"] \ No newline at end of file diff --git a/.astro/settings.json b/.astro/settings.json deleted file mode 100644 index c370f92..0000000 --- a/.astro/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "_variables": { - "lastUpdateCheck": 1780140273670 - } -} \ No newline at end of file diff --git a/.astro/types.d.ts b/.astro/types.d.ts deleted file mode 100644 index 03d7cc4..0000000 --- a/.astro/types.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2e9e87c..bf19b56 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,9 @@ # build output dist/ +# astro generated cache +.astro/ + # dependencies node_modules/ diff --git a/astro.config.mjs b/astro.config.mjs index 705e121..72eb7ea 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -5,4 +5,19 @@ export default defineConfig({ site: 'https://devcongress.org', base: '/', output: 'static', + image: { + domains: [ + 'pbs.twimg.com', + 'ca.slack-edge.com', + 'api.navii.dev', + 'avatars.githubusercontent.com', + 'images.squarespace-cdn.com', + 'cdn.prod.website-files.com', + 'www.kweku.tech', + 'meltwater.org', + 'xplorio.com', + 'cdn-assets-cloud.frontify.com', + 'lh3.googleusercontent.com', + ], + }, }); diff --git a/content/partners/fido.yaml b/content/partners/fido.yaml index 0964bb3..b3ded61 100644 --- a/content/partners/fido.yaml +++ b/content/partners/fido.yaml @@ -2,3 +2,5 @@ name: Fido Credit logo: https://cdn.prod.website-files.com/62fa16d8d83816b0fc5defc4/62fcf5fdb02a38631df13edb_footer_logo.svg url: https://gh.fido.money/ backgroundColor: "#d6086b" +width: 332 +height: 96 diff --git a/content/partners/kweku_tech.yaml b/content/partners/kweku_tech.yaml index 4e47257..1a6091d 100644 --- a/content/partners/kweku_tech.yaml +++ b/content/partners/kweku_tech.yaml @@ -2,3 +2,5 @@ name: Kweku Tech Media logo: https://www.kweku.tech/_next/image?url=%2Flogo.svg&w=256&q=75 url: https://kweku.tech backgroundColor: "#070d0d" +width: 256 +height: 64 diff --git a/content/partners/mest.yaml b/content/partners/mest.yaml index 6fb216d..79680a8 100644 --- a/content/partners/mest.yaml +++ b/content/partners/mest.yaml @@ -2,3 +2,5 @@ name: MEST Africa logo: https://meltwater.org/wp-content/uploads/2024/01/MEST-Logo_landscape_03-e1704132329210-300x49.png url: https://meltwater.org/ backgroundColor: "#ffffff" +width: 300 +height: 49 diff --git a/content/partners/old-mutual.yaml b/content/partners/old-mutual.yaml index 39e773f..add8898 100644 --- a/content/partners/old-mutual.yaml +++ b/content/partners/old-mutual.yaml @@ -2,3 +2,5 @@ name: Old Mutual Insurance Ltd. logo: https://xplorio.com/xplorio/categories/28627/OM_Logo_Horizonal_Reverse_on_Vignette_RGB_1583910489.jpg?width=960&height=440 url: https://www.oldmutual.com/ backgroundColor: "#60b84888" +width: 960 +height: 440 diff --git a/content/partners/paystack.yaml b/content/partners/paystack.yaml index 0c09a46..cb04de0 100644 --- a/content/partners/paystack.yaml +++ b/content/partners/paystack.yaml @@ -2,3 +2,5 @@ name: Paystack logo: https://cdn-assets-cloud.frontify.com/s3/frontify-cloud-files-us/eyJwYXRoIjoiZnJvbnRpZnlcL2FjY291bnRzXC8yYVwvMTQxNzczXC9wcm9qZWN0c1wvMTc4NjE0XC9hc3NldHNcL2E5XC8zNTI0MTM2XC9jYmJkNzA1OTEyN2NlOGU3ZDI5ZDM5NmJkMzhmMzkwNi0xNTY5MjE3MjIzLnBuZyJ9:frontify:xd65O1_BCk88mGEkjq6maiXPQH5Ol5Vhn97tbY1vl0c?width=1600&format=webp&quality=100 url: https://paystack.com/ backgroundColor: "#f1fef4f2" +width: 1600 +height: 280 diff --git a/content/partners/unicef.yaml b/content/partners/unicef.yaml index b2dd27e..bb2e78d 100644 --- a/content/partners/unicef.yaml +++ b/content/partners/unicef.yaml @@ -2,3 +2,5 @@ name: UNICEF Ghana logo: https://www.unicef.org/ghana/sites/unicef.org.ghana/files/styles/logo/public/English_23.png.webp?itok=TAurVHy1 url: https://www.unicef.org/ghana/ backgroundColor: "#008bbf" +width: 400 +height: 400 diff --git a/package.json b/package.json index a3eb52e..ecab2c7 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ }, "dependencies": { "astro": "^6.4.2", + "sharp": "^0.34.5", "zod": "^4.4.3" } } \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f49b680..adf04c4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -11,6 +11,9 @@ importers: astro: specifier: ^6.4.2 version: 6.4.2(rollup@4.60.4) + sharp: + specifier: ^0.34.5 + version: 0.34.5 zod: specifier: ^4.4.3 version: 4.4.3 @@ -1588,8 +1591,7 @@ snapshots: '@esbuild/win32-x64@0.27.7': optional: true - '@img/colour@1.1.0': - optional: true + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.34.5': optionalDependencies: @@ -2016,8 +2018,7 @@ snapshots: destr@2.0.5: {} - detect-libc@2.1.2: - optional: true + detect-libc@2.1.2: {} devalue@5.8.1: {} @@ -2837,7 +2838,6 @@ snapshots: '@img/sharp-win32-arm64': 0.34.5 '@img/sharp-win32-ia32': 0.34.5 '@img/sharp-win32-x64': 0.34.5 - optional: true shiki@4.1.0: dependencies: diff --git a/public/images/logo-nav.png b/public/images/logo-nav.png deleted file mode 100644 index 9d1130c..0000000 Binary files a/public/images/logo-nav.png and /dev/null differ diff --git a/public/images/logo-sm.png b/public/images/logo-sm.png deleted file mode 100644 index bcaa514..0000000 Binary files a/public/images/logo-sm.png and /dev/null differ diff --git a/public/images/logo-source.png b/public/images/logo-source.png deleted file mode 100644 index 13023ac..0000000 Binary files a/public/images/logo-source.png and /dev/null differ diff --git a/public/images/logo@2x.png b/public/images/logo@2x.png deleted file mode 100644 index 07e9542..0000000 Binary files a/public/images/logo@2x.png and /dev/null differ diff --git a/public/images/logo.png b/src/assets/logo.png similarity index 100% rename from public/images/logo.png rename to src/assets/logo.png diff --git a/src/components/AdminsSection.astro b/src/components/AdminsSection.astro index f02a6fe..3f243c8 100644 --- a/src/components/AdminsSection.astro +++ b/src/components/AdminsSection.astro @@ -1,4 +1,6 @@ --- +import { Image } from 'astro:assets'; + interface Social { platform: string; url: string; } interface Admin { id: string; @@ -19,9 +21,11 @@ const sorted = [...admins].sort((a, b) => a.data.name.localeCompare(b.data.name) {sorted.map((admin) => (
  • - {admin.data.name} a.data.name.localeCompare(b.data.name) .admins-grid { display: grid; - grid-template-columns: repeat(2, 1fr); + grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--s4); } - @media (min-width: 500px) { .admins-grid { grid-template-columns: repeat(3, 1fr); } } - @media (min-width: 768px) { .admins-grid { grid-template-columns: repeat(4, 1fr); } } - @media (min-width: 1024px) { .admins-grid { grid-template-columns: repeat(6, 1fr); } } + @media (min-width: 500px) { .admins-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } } + @media (min-width: 768px) { .admins-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } } + @media (min-width: 1024px) { .admins-grid { grid-template-columns: repeat(6, minmax(0, 1fr)); } } .admin-card { display: flex; diff --git a/src/components/DonateSection.astro b/src/components/DonateSection.astro index 0933ce0..5363208 100644 --- a/src/components/DonateSection.astro +++ b/src/components/DonateSection.astro @@ -61,12 +61,12 @@ const { paystackUrl, donate } = Astro.props; .donate-inner { display: grid; - grid-template-columns: 1fr; + grid-template-columns: minmax(0, 1fr); gap: var(--s8); } @media (min-width: 860px) { .donate-inner { - grid-template-columns: 1fr 1fr; + grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); align-items: start; gap: var(--s10); } diff --git a/src/components/FooterSection.astro b/src/components/FooterSection.astro index 623f2f9..bfed490 100644 --- a/src/components/FooterSection.astro +++ b/src/components/FooterSection.astro @@ -1,4 +1,7 @@ --- +import { Image } from 'astro:assets'; +import logo from '../assets/logo.png'; + interface Social { platform: string; url: string; } interface Props { socials: Social[]; } const { socials } = Astro.props; @@ -10,7 +13,7 @@ const year = new Date().getFullYear();