diff --git a/.astro/collections/meetups.schema.json b/.astro/collections/meetups.schema.json index 7011251..0c82534 100644 --- a/.astro/collections/meetups.schema.json +++ b/.astro/collections/meetups.schema.json @@ -19,8 +19,7 @@ "minLength": 10 }, "cover": { - "type": "string", - "format": "uri" + "type": "string" }, "location": { "type": "object", @@ -231,8 +230,7 @@ "type": "object", "properties": { "url": { - "type": "string", - "format": "uri" + "type": "string" }, "type": { "default": "image", diff --git a/.astro/data-store.json b/.astro/data-store.json index 5fdc1d2..034c540 100644 --- a/.astro/data-store.json +++ b/.astro/data-store.json @@ -1 +1 @@ -[["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 +[["Map",1,2,63,64,221,222,548,549,556,557,612,613],"activities",["Map",3,4,13,14,24,25,34,35,44,45,54,55],"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","project-night",{"id":44,"data":46,"filePath":52,"digest":53},{"title":47,"description":48,"link":49,"color":50,"order":51,"status":21},"Project Night","A weekly virtual gathering to work on our personal projects, and share learnings. Message @aberkowitz your email for an invite.","slack://channel?team=T0A0T7A5Q&id=D3KKP1X7A","#735FFF",6,"content/activities/project-night.yaml","b5275e107bc25250","what-are-you-building",{"id":54,"data":56,"filePath":61,"digest":62},{"title":57,"description":58,"color":59,"order":60,"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",65,66,82,83,94,95,104,105,118,119,130,131,147,148,157,158,171,172,185,186,197,198,211,212],"andrew-smith",{"id":65,"data":67,"filePath":80,"digest":81},{"name":68,"image":69,"socials":70},"Andrew Smith","https://pbs.twimg.com/profile_images/1686721836795432960/Ghu7dKZC_400x400.jpg",[71,74,77],{"platform":72,"url":73},"x","https://twitter.com/silentworks",{"platform":75,"url":76},"website","https://donielsmith.com",{"platform":78,"url":79},"github","https://github.com/silentworks","content/admins/andrew-smith.yaml","03cea24231c1709c","anthony-acquah",{"id":82,"data":84,"filePath":92,"digest":93},{"name":85,"image":86,"socials":87},"Anthony Acquah","https://pbs.twimg.com/profile_images/3248556771/feb8ad6b5f403e70ea321d17b80df232_400x400.png",[88,90],{"platform":72,"url":89},"https://twitter.com/tony_mobster",{"platform":75,"url":91},"https://about.me/anthonyacquah","content/admins/anthony-acquah.yaml","e1fc834d78e3fe91","blossom-dugbatey",{"id":94,"data":96,"filePath":102,"digest":103},{"name":97,"image":98,"socials":99},"Blossom Dugbatey","https://ca.slack-edge.com/T0A0T7A5Q-U02LQJ83N9H-42650d9d2b97-512",[100],{"platform":72,"url":101},"https://x.com/DedeCodex","content/admins/blossom-dugbatey.yaml","b71a9d14bc7458bc","bubunyo-nyavor",{"id":104,"data":106,"filePath":116,"digest":117},{"name":107,"image":108,"socials":109},"Bubunyo Nyavor","https://pbs.twimg.com/media/FHvsk2MXMAQBovS?format=jpg&name=large",[110,112,114],{"platform":72,"url":111},"https://twitter.com/KiddBubu",{"platform":75,"url":113},"https://5error.com",{"platform":78,"url":115},"https://github.com/bubunyo","content/admins/bubunyo-nyavor.yaml","5fa8bc37ac91ad18","claude-ayitey",{"id":118,"data":120,"filePath":128,"digest":129},{"name":121,"image":122,"socials":123},"Claude Ayitey","https://api.navii.dev/avatar/milo?size=192&animated=1",[124,126],{"platform":72,"url":125},"https://twitter.com/mrayitey",{"platform":75,"url":127},"https://ayitey.com","content/admins/claude-ayitey.yaml","e7a8790dc4e29aa8","edem-kumodzi",{"id":130,"data":132,"filePath":145,"digest":146},{"name":133,"image":134,"socials":135},"Edem Kumodzi","https://avatars.githubusercontent.com/u/676790?v=4",[136,138,140,143],{"platform":72,"url":137},"https://twitter.com/edemkumodzi",{"platform":75,"url":139},"https://edemkumodzi.com",{"platform":141,"url":142},"linkedin","https://www.linkedin.com/in/edemkumodzi",{"platform":78,"url":144},"https://github.com/edem","content/admins/edem-kumodzi.yaml","a2e10a7979ea5073","elorm-adjaho",{"id":147,"data":149,"filePath":155,"digest":156},{"name":150,"image":151,"socials":152},"Elorm Adjaho","https://images.squarespace-cdn.com/content/v1/64c1ced9e4d636753f2d62a9/6c6bc5a8-d5ac-4603-8620-8d7a501cae5f/Elorm+Adjaho+_+IWL+Fellow.jpg",[153],{"platform":72,"url":154},"https://twitter.com/elormm_a","content/admins/elorm-adjaho.yaml","cd9882ad2f2adb35","francis-addai",{"id":157,"data":159,"filePath":169,"digest":170},{"name":160,"image":161,"socials":162},"Francis Addai","https://pbs.twimg.com/profile_images/1278660776232996864/YouNWmIr_400x400.jpg",[163,165,167],{"platform":72,"url":164},"https://twitter.com/faddai",{"platform":75,"url":166},"https://francisaddai.com",{"platform":78,"url":168},"https://github.com/francisaddai","content/admins/francis-addai.yaml","bfa15b76dbc718f3","nathan-sodja",{"id":171,"data":173,"filePath":183,"digest":184},{"name":174,"image":175,"socials":176},"Nathan Sodja","https://ca.slack-edge.com/T0A0T7A5Q-U01NAPY9TEC-f92ae3063f27-512",[177,179,181],{"platform":72,"url":178},"https://x.com/me_souljah",{"platform":75,"url":180},"https://hashnode.com/@nate233",{"platform":78,"url":182},"https://github.com/NateOs","content/admins/nathan-sodja.yaml","d7928e44d6152a9c","saviour-kirk",{"id":185,"data":187,"filePath":195,"digest":196},{"name":188,"image":189,"socials":190},"Saviour Kirk Agbenyegah","https://api.navii.dev/avatar/yumi?size=192&animated=1",[191,193],{"platform":72,"url":192},"https://twitter.com/savekirk",{"platform":141,"url":194},"https://www.linkedin.com/in/savekirk","content/admins/saviour-kirk.yaml","dfeb34e8b9732be4","stefan-froelich",{"id":197,"data":199,"filePath":209,"digest":210},{"name":200,"image":201,"socials":202},"Stefan Froelich","https://pbs.twimg.com/profile_images/1875679658647138304/w--j-PK8_400x400.jpg",[203,205,207],{"platform":72,"url":204},"https://x.com/TheDumbTechGuy",{"platform":75,"url":206},"https://thedumbtechguy.com",{"platform":141,"url":208},"https://www.linkedin.com/in/stefanfroelich","content/admins/stefan-froelich.yaml","517ef62ee1547fec","yaw-boakye",{"id":211,"data":213,"filePath":219,"digest":220},{"name":214,"image":215,"socials":216},"Yaw Boakye","https://pbs.twimg.com/profile_images/1680929162616291329/_jCSwpti_400x400.jpg",[217],{"platform":72,"url":218},"https://twitter.com/ejnbo","content/admins/yaw-boakye.yaml","242d14ddf4c063ea","meetups",["Map",223,224,274,275,319,320,360,361,423,424,505,506],"100-january-2026",{"id":223,"data":225,"filePath":272,"digest":273},{"name":226,"start":227,"end":228,"description":229,"cover":230,"location":231,"stream_url":234,"embed_stream":235,"registration_url":236,"speakers":237,"schedule":238,"photos":267,"videos":271},"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":232,"map_url":233},"buro.gh, Accra","https://maps.app.goo.gl/n8u6C6TgdtW35db67",null,false,"https://luma.com/70danu1w",[],[239,244,250,254,259,263],{"time":240,"title":241,"type":242,"lead":234,"resources":243},"10:00 AM","Doors open & networking","networking",[],{"time":245,"title":246,"type":247,"lead":248,"resources":249},"10:30 AM","Talk: Claude Code When You Don't Know You're (Yet)","talk","Philip Narteh",[],{"time":251,"title":252,"type":247,"lead":234,"resources":253},"11:30 AM","Talk: OWASP Top 10: 2025 Release",[],{"time":255,"title":256,"type":257,"lead":234,"resources":258},"12:30 PM","System Design","open_discussion",[],{"time":260,"title":261,"type":247,"lead":234,"resources":262},"1:30 PM","Product & tool demos",[],{"time":264,"title":265,"type":242,"lead":234,"resources":266},"2:00 PM","Networking & close",[],[268],{"url":269,"type":270},"https://drive.google.com/drive/folders/1jEW8J7xMFu0o1YocISeLbVRy5F5i2gxd","folder",[],"content/meetups/100-january-2026.yaml","ee69fbc6ac8adc64","200-february-2026",{"id":274,"data":276,"filePath":317,"digest":318},{"name":277,"start":278,"end":279,"description":280,"cover":281,"location":282,"stream_url":234,"embed_stream":235,"registration_url":285,"speakers":286,"schedule":287,"photos":304,"videos":316},"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":283,"map_url":284},"Nyansa Square.","https://maps.app.goo.gl/NbaFFBcy89Dehq8VA","https://luma.com/frh11t0y",[],[288,290,293,297,299,301],{"time":240,"title":241,"type":242,"lead":234,"resources":289},[],{"time":245,"title":291,"type":247,"lead":234,"resources":292},"Tech talks",[],{"time":251,"title":294,"type":295,"lead":234,"resources":296},"Hands-on workshops","workshop",[],{"time":255,"title":256,"type":257,"lead":234,"resources":298},[],{"time":260,"title":261,"type":247,"lead":234,"resources":300},[],{"time":264,"title":302,"type":242,"lead":234,"resources":303},"Pizza, drinks & networking",[],[305,308,310,312,314],{"url":306,"type":307},"https://pbs.twimg.com/media/HCaAt7HWsAAWOcT?format=jpg&name=large","image",{"url":309,"type":307},"https://pbs.twimg.com/media/HCaAt7rbwAAx2qn?format=jpg&name=large",{"url":311,"type":307},"https://pbs.twimg.com/media/HCaAt7JXwAA4Hi8?format=jpg&name=large",{"url":313,"type":307},"https://pbs.twimg.com/media/HCaAt7HXUAAX75z?format=jpg&name=large",{"url":315,"type":270},"https://drive.google.com/drive/folders/1bowyXOaJiRpZ5XM6SprzJfJ85VqfUrYi",[],"content/meetups/200-february-2026.yaml","2eb27df1e9435c20","300-march-2026",{"id":319,"data":321,"filePath":358,"digest":359},{"name":322,"start":323,"end":324,"description":325,"cover":306,"location":326,"stream_url":234,"embed_stream":235,"registration_url":329,"speakers":330,"schedule":331,"photos":356,"videos":357},"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":327,"map_url":328},"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",[],[332,334,337,340,344,346,349,352],{"time":240,"title":241,"type":242,"lead":234,"resources":333},[],{"time":245,"title":335,"type":247,"lead":234,"resources":336},"Tech Talk: Memory Consistency & Cache Coherence",[],{"time":251,"title":338,"type":295,"lead":234,"resources":339},"Workshops",[],{"time":341,"title":342,"type":295,"lead":234,"resources":343},"12:00 PM","Hardware Session",[],{"time":255,"title":256,"type":257,"lead":234,"resources":345},[],{"time":260,"title":347,"type":247,"lead":234,"resources":348},"Product Demos",[],{"time":264,"title":350,"type":257,"lead":234,"resources":351},"Kahoot Session",[],{"time":353,"title":354,"type":242,"lead":234,"resources":355},"2:30 PM","Pizza & Networking",[],[],[],"content/meetups/300-march-2026.yaml","0167a3178cc4a175","400-april-2026",{"id":360,"data":362,"filePath":421,"digest":422},{"name":363,"start":364,"end":365,"description":366,"cover":367,"location":368,"stream_url":234,"embed_stream":235,"registration_url":369,"speakers":370,"schedule":371,"photos":391,"videos":420},"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":327,"map_url":328},"https://lu.ma/qqx9uk6u",[],[372,374,377,381,383,387,389],{"time":240,"title":241,"type":242,"lead":234,"resources":373},[],{"time":245,"title":375,"type":247,"lead":234,"resources":376},"Tech Talk: Memory Consistency & Cache Coherence (cont'd)",[],{"time":251,"title":378,"type":247,"lead":379,"resources":380},"Design Session with UXDerrick","UXDerrick",[],{"time":341,"title":256,"type":257,"lead":234,"resources":382},[],{"time":384,"title":385,"type":247,"lead":234,"resources":386},"12:45 PM","Product & Tool Demos",[],{"time":260,"title":350,"type":257,"lead":234,"resources":388},[],{"time":264,"title":354,"type":242,"lead":234,"resources":390},[],[392,394,396,398,400,402,404,406,408,410,412,414,416,418],{"url":393,"type":307},"https://pbs.twimg.com/media/HGwrt-RagAAgX_-?format=jpg&name=large",{"url":395,"type":307},"https://pbs.twimg.com/media/HGwm9MKbQAAwyPr?format=jpg&name=large",{"url":397,"type":307},"https://pbs.twimg.com/media/HGwYEdhakAAvmCm?format=jpg&name=large",{"url":399,"type":307},"https://pbs.twimg.com/media/HGwMz61a0AAor9d?format=jpg&name=large",{"url":401,"type":307},"https://pbs.twimg.com/media/HGwC7dEbMAAU9os?format=jpg&name=large",{"url":403,"type":307},"https://pbs.twimg.com/media/HGv0RwAaAAAfNVH?format=jpg&name=large",{"url":405,"type":307},"https://pbs.twimg.com/media/HEgj8EFWgAAtqPn?format=jpg&name=large",{"url":407,"type":307},"https://pbs.twimg.com/media/HEgjh9YXcAAubIw?format=jpg&name=large",{"url":409,"type":307},"https://pbs.twimg.com/media/HEge8jJa0AA6Lg9?format=jpg&name=large",{"url":411,"type":307},"https://pbs.twimg.com/media/HEgT9zma8AAX3tn?format=jpg&name=large",{"url":413,"type":307},"https://pbs.twimg.com/media/HEgSynGbIAAuJLn?format=jpg&name=large",{"url":415,"type":307},"https://pbs.twimg.com/media/HEgAxq1WQAAb8bc?format=jpg&name=large",{"url":417,"type":307},"https://pbs.twimg.com/media/HEf5kkRbEAAyxIl?format=jpg&name=large",{"url":419,"type":307},"https://pbs.twimg.com/media/HEfovhhakAAE4Fl?format=jpg&name=large",[],"content/meetups/400-april-2026.yaml","870a5d69b02dc314","500-may-2026",{"id":423,"data":425,"filePath":503,"digest":504},{"name":426,"start":427,"end":428,"description":429,"cover":430,"location":431,"stream_url":432,"embed_stream":235,"registration_url":433,"speakers":434,"schedule":435,"photos":499,"videos":502},"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":232,"map_url":233},"https://x.com/i/broadcasts/1aKbddMWOjaJX","https://lu.ma/3b0il40a",[],[436,438,442,449,453,456,463,467,473,481,488],{"time":240,"title":241,"type":242,"lead":234,"resources":437},[],{"time":439,"title":440,"type":247,"lead":234,"resources":441},"11:00 AM","Welcome address",[],{"time":443,"title":444,"type":247,"lead":234,"resources":445},"11:10 AM","Product Demo: Sankofa",[446],{"title":447,"url":448},"Website","https://sankofa.dev",{"time":251,"title":450,"type":295,"lead":451,"resources":452},"Manny — Demo with Microcontrollers","@willofdaedalus",[],{"time":255,"title":454,"type":247,"lead":234,"resources":455},"Product Demo: OpenMirror",[],{"time":457,"title":458,"type":247,"lead":234,"resources":459},"12:50 PM","Old Mutual",[460],{"title":461,"url":462},"Startup Resources","https://ecosystem.oldmutual.com.gh",{"time":464,"title":465,"type":247,"lead":234,"resources":466},"1:25 PM","FIDCON partnership announcement & promo code",[],{"time":468,"title":469,"type":247,"lead":234,"resources":470},"1:35 PM","Product Demo: JestryAI",[471],{"title":447,"url":472},"https://www.jestryai.com/",{"time":474,"title":475,"type":257,"lead":476,"resources":477},"1:50 PM","System Design Session (Blacko's Detty December Concert)","Tonny-Bright",[478],{"title":479,"url":480},"Problem Discription","https://docs.google.com/document/d/1qGhdc7L_PoCPuEGaheQ5RT5C-ML9-BzzfVQjmKTfSTQ/edit?usp=sharing",{"time":482,"title":483,"type":247,"lead":234,"resources":484},"2:50 PM","DevCongress Support Announcement",[485],{"title":486,"url":487},"Feedback Form","https://docs.google.com/forms/d/e/1FAIpQLSco-46QfOtkU70eOoFmskRa5TPLBGoVI34KudArxmrzO3dFdw/viewform",{"time":489,"title":490,"type":491,"lead":234,"resources":492},"3:10 PM","Panel Discussion - The New NITA Bill","panel",[493,496],{"title":494,"url":495},"NATIONAL INFORMATION TECHNOLOGY AUTHORITY BILL, 2025","https://nita.gov.gh/wp-content/uploads/2025/NITA-2008-act-2025-1.pdf",{"title":497,"url":498},"NITA REGULATORY | IT SERVICE PROVIDER REGISTRATION (FEES)","https://regulatory.nita.gov.gh/portal/regulatory/registration-of-it-firms",[500],{"url":501,"type":270},"https://drive.google.com/drive/folders/1NblGjqakAaTWZ7SBvTZBsImvnpQzhXrQ?usp=sharing",[],"content/meetups/500-may-2026.yaml","0a064f6e865ce3f3","600-april-2026",{"id":505,"data":507,"filePath":546,"digest":547},{"name":508,"start":509,"end":510,"description":511,"cover":512,"location":513,"stream_url":234,"embed_stream":235,"registration_url":234,"speakers":515,"schedule":516,"photos":541,"videos":545},"DevCongress April Quarterly Meetup","2026-04-04T18:00:00+00:00","2026-04-04T21:45:00+00:00","An informal online quarterly meetup for DevCongress members in Ghana and across the diaspora. The April conversation centered on AI, coding, community feedback, and how we can keep monthly meetups funded and useful.\n","/images/quarterly-april-meet-up.jpeg",{"name":514,"map_url":234},"Google Meet",[],[517,521,525,529,533,537],{"time":518,"title":519,"type":242,"lead":234,"resources":520},"6:00 PM","Greetings, weather check & community banter",[],{"time":522,"title":523,"type":257,"lead":234,"resources":524},"6:30 PM","What's happening in the tech ecosystem",[],{"time":526,"title":527,"type":257,"lead":234,"resources":528},"6:45 PM","Open discussion: AI, coding, hallucinations & Leetcode for AI",[],{"time":530,"title":531,"type":257,"lead":234,"resources":532},"8:00 PM","Community feedback: what DevCongress can improve",[],{"time":534,"title":535,"type":257,"lead":234,"resources":536},"8:45 PM","Funding monthly meetups and community support",[],{"time":538,"title":539,"type":242,"lead":234,"resources":540},"9:30 PM","Open banter & close",[],[542,543],{"url":512,"type":307},{"url":544,"type":307},"/images/quarterly-april-meetup-2.jpeg",[],"content/meetups/600-april-2026.yaml","7ff3a15e046317d1","meta::meta",["Map",550,551,552,553,554,555],"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\":\"127.0.0.1\",\"port\":4321,\"allowedHosts\":[\"127.0.0.1\",\"127.0.0.1\",\"127.0.0.1\",\"127.0.0.1\"]},\"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","38bcadffecda837c","partners",["Map",558,559,567,568,576,577,585,586,594,595,603,604],"fido",{"id":558,"data":560,"filePath":565,"digest":566},{"name":561,"logo":562,"url":563,"backgroundColor":564},"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":567,"data":569,"filePath":574,"digest":575},{"name":570,"logo":571,"url":572,"backgroundColor":573},"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":576,"data":578,"filePath":583,"digest":584},{"name":579,"logo":580,"url":581,"backgroundColor":582},"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":585,"data":587,"filePath":592,"digest":593},{"name":588,"logo":589,"url":590,"backgroundColor":591},"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":594,"data":596,"filePath":601,"digest":602},{"name":597,"logo":598,"url":599,"backgroundColor":600},"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":603,"data":605,"filePath":610,"digest":611},{"name":606,"logo":607,"url":608,"backgroundColor":609},"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",612,614],{"id":612,"data":615,"filePath":703},{"community_slack_url":616,"paystack_url":617,"youtube_embed_url":618,"stats":619,"socials":628,"roles":644,"mission_section":660,"donate_section":681,"hero":692},"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",[620,624],{"value":621,"label":622,"description":623},"6000+","Community Members","Developers, Designers, Founders, Hackers and Makers across Africa.",{"value":625,"label":626,"description":627},"10+","Years","Building Community since 2015.",[629,631,633,635,638,641],{"platform":141,"url":630},"https://www.linkedin.com/company/devcongress",{"platform":72,"url":632},"https://x.com/devcongress",{"platform":78,"url":634},"https://github.com/devcongress",{"platform":636,"url":637},"youtube","https://youtube.com/devcongress",{"platform":639,"url":640},"facebook","https://facebook.com/devcongress",{"platform":642,"url":643},"instagram","https://www.instagram.com/devcongress/",[645,646,647,648,649,650,651,652,653,654,655,656,657,658,659],"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":661,"headline":662,"body":663,"cta":664,"items":665},"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",[666,669,672,675,678],{"heading":667,"description":668},"Build capacity & confidence through community led *mentorship*.","Over 500+ professionals upskilled through mentorship, events, and hands-on feedback.",{"heading":670,"description":671},"Expose tech talents to a rich array of *resources*.","30+ community sessions, 100+ shared resources, and growing.",{"heading":673,"description":674},"Contribute to innovative and community-driven projects that create *real impact*.","Contributed to 10+ community-led tools powering innovation across Africa.",{"heading":676,"description":677},"Harness the collective strength of community to solve *real problems*.","From solo learners to startup founders, we connect and grow together.",{"heading":679,"description":680},"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":682,"heading":683,"body":684,"cta_text":685,"uses_header":686,"uses_items":687},"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",[688,689,690,691],"Monthly meetups across Ghana","Dedicated Support Programs","Community Tools and Shared Resources","Critical Infrastructure to Run the Community",{"eyebrow":693,"headline":694,"cta_primary":695,"cta_secondary":698,"video_label":701,"video_live":702},"Africa's tech community","Where Africa's builders connect, collaborate and grow.",{"text":696,"color":697},"Join us on Slack","pink",{"text":699,"color":700},"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 index c370f92..df3186e 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -1,5 +1,5 @@ { "_variables": { - "lastUpdateCheck": 1780140273670 + "lastUpdateCheck": 1781261337506 } } \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2e9e87c..8c0c4c7 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,8 @@ pnpm-debug.log* # jetbrains setting folder .idea/ + +# Generated by local agent tooling +.codebase-indexer/ +.sentinel/ +CLAUDE.md diff --git a/content/meetups/100-january-2026.yaml b/content/meetups/100-january-2026.yaml index 931f5a2..926f6c2 100644 --- a/content/meetups/100-january-2026.yaml +++ b/content/meetups/100-january-2026.yaml @@ -14,8 +14,9 @@ description: > cover: https://pbs.twimg.com/media/G-tCqAnWIAA3ny4?format=jpg&name=large location: + label: buro.gh, Accra name: buro.gh, Accra - map_url: https://maps.app.goo.gl/n8u6C6TgdtW35db67 + url: https://maps.app.goo.gl/n8u6C6TgdtW35db67 stream_url: null registration_url: https://luma.com/70danu1w diff --git a/content/meetups/200-february-2026.yaml b/content/meetups/200-february-2026.yaml index c8ea9cd..882d66a 100644 --- a/content/meetups/200-february-2026.yaml +++ b/content/meetups/200-february-2026.yaml @@ -10,8 +10,9 @@ description: > cover: https://pbs.twimg.com/media/HAGkdjbWEAAJFba?format=jpg&name=large location: + label: Nyansa Square, Accra name: Nyansa Square. - map_url: https://maps.app.goo.gl/NbaFFBcy89Dehq8VA + url: https://maps.app.goo.gl/NbaFFBcy89Dehq8VA stream_url: null registration_url: https://luma.com/frh11t0y diff --git a/content/meetups/300-march-2026.yaml b/content/meetups/300-march-2026.yaml index 9363c12..03b440e 100644 --- a/content/meetups/300-march-2026.yaml +++ b/content/meetups/300-march-2026.yaml @@ -12,8 +12,9 @@ description: > cover: https://pbs.twimg.com/media/HCaAt7HWsAAWOcT?format=jpg&name=large location: + label: Fido, Accra name: Fido, Opposite SSNIT Guest House, Julius Nyerere Rd, Accra - map_url: https://www.google.com/maps/search/?api=1&query=5.570918%2C-0.18906119999999998 + url: https://www.google.com/maps/search/?api=1&query=5.570918%2C-0.18906119999999998 stream_url: null registration_url: https://luma.com/jf8pjncl diff --git a/content/meetups/400-april-2026.yaml b/content/meetups/400-april-2026.yaml index a4de389..caaab5b 100644 --- a/content/meetups/400-april-2026.yaml +++ b/content/meetups/400-april-2026.yaml @@ -13,8 +13,9 @@ description: > cover: https://pbs.twimg.com/media/HCLwbPBXYAAzGdM?format=jpg&name=large location: + label: Fido, Accra name: Fido, Opposite SSNIT Guest House, Julius Nyerere Rd, Accra - map_url: https://www.google.com/maps/search/?api=1&query=5.570918%2C-0.18906119999999998 + url: https://www.google.com/maps/search/?api=1&query=5.570918%2C-0.18906119999999998 stream_url: null registration_url: https://lu.ma/qqx9uk6u diff --git a/content/meetups/500-may-2026.yaml b/content/meetups/500-may-2026.yaml index e56a228..66337c7 100644 --- a/content/meetups/500-may-2026.yaml +++ b/content/meetups/500-may-2026.yaml @@ -8,8 +8,9 @@ description: > cover: https://pbs.twimg.com/media/HG_xUr-WIAABl-e?format=jpg&name=medium location: + label: buro.gh, Accra name: buro.gh, Accra - map_url: https://maps.app.goo.gl/n8u6C6TgdtW35db67 + url: https://maps.app.goo.gl/n8u6C6TgdtW35db67 stream_url: https://x.com/i/broadcasts/1aKbddMWOjaJX registration_url: https://lu.ma/3b0il40a diff --git a/content/meetups/600-april-2026.yaml b/content/meetups/600-april-2026.yaml new file mode 100644 index 0000000..74ab2d8 --- /dev/null +++ b/content/meetups/600-april-2026.yaml @@ -0,0 +1,56 @@ +name: DevCongress April Quarterly Meetup +start: "2026-04-04T18:00:00+00:00" +end: "2026-04-04T21:45:00+00:00" +description: > + An informal online quarterly meetup for DevCongress members in Ghana and + across the diaspora. The April conversation centered on AI, coding, community + feedback, and how we can keep monthly meetups funded and useful. +cover: /images/quarterly-april-meet-up.jpeg + +location: + label: Google Meet + name: Google Meet + url: null + +stream_url: null +registration_url: null + +speakers: [] + +schedule: + - time: "6:00 PM" + title: Greetings, weather check & community banter + type: networking + lead: null + resources: [] + - time: "6:30 PM" + title: What's happening in the tech ecosystem + type: open_discussion + lead: null + resources: [] + - time: "6:45 PM" + title: "Open discussion: AI, coding, hallucinations & Leetcode for AI" + type: open_discussion + lead: null + resources: [] + - time: "8:00 PM" + title: "Community feedback: what DevCongress can improve" + type: open_discussion + lead: null + resources: [] + - time: "8:45 PM" + title: Funding monthly meetups and community support + type: open_discussion + lead: null + resources: [] + - time: "9:30 PM" + title: Open banter & close + type: networking + lead: null + resources: [] + +photos: + - url: /images/quarterly-april-meet-up.jpeg + - url: /images/quarterly-april-meetup-2.jpeg + +videos: [] diff --git a/content/meetups/700-june-2026.yaml b/content/meetups/700-june-2026.yaml new file mode 100644 index 0000000..9092d20 --- /dev/null +++ b/content/meetups/700-june-2026.yaml @@ -0,0 +1,69 @@ +name: DevCongress June Meetup +start: "2026-06-20T10:00:00+00:00" +end: "2026-06-20T15:30:00+00:00" +description: > + A builder-focused meetup for developers, engineers, and tech enthusiasts to + learn from real-world experiences, connect with other builders, and discuss + software engineering, cloud systems, AI/ML, cybersecurity, and the work of + people actively building in the ecosystem. +cover: https://images.lumacdn.com/uploads/cr/1a1af572-a563-4695-8382-2e3063121a4e.png + +location: + label: Fido, Accra + name: Fido, Opposite SSNIT Guest House, Julius Nyerere Rd, Accra + url: https://www.google.com/maps/search/?api=1&query=5.5704282%2C-0.1888184 + +stream_url: null +registration_url: https://luma.com/uic56yjo + +speakers: [] + +schedule: + - time: "11:00 AM - 11:05 AM" + title: Welcome address + type: talk + lead: null + resources: [] + - time: "11:10 AM - 11:55 AM" + title: Your fired employee still has access. Here is why. + type: talk + lead: Jesse + resources: [] + - time: "12:00 PM - 12:30 PM" + title: "Selling SaaS to Ghanaian Businesses: What's Working So Far" + type: talk + lead: Seth + resources: [] + - time: "12:35 PM - 12:45 PM" + title: Jampoll session + type: open_discussion + lead: null + resources: [] + - time: "12:45 PM - 1:30 PM" + title: Design in the age of AI + type: talk + lead: Jeffrey Hinson + resources: [] + - time: "1:35 PM - 2:35 PM" + title: System Design session + type: open_discussion + lead: null + resources: [] + - time: "2:40 PM - 2:55 PM" + title: QuiverFood demo + type: talk + lead: Christian + resources: [] + - time: "3:00 PM - 3:15 PM" + title: FlameLink demo + type: talk + lead: Codekeyz + resources: [] + - time: "3:15 PM - 3:30 PM" + title: Trospot demo + type: talk + lead: Joseph + resources: [] + +photos: [] +videos: [] diff --git a/content/meetups/800-july-2026.yaml b/content/meetups/800-july-2026.yaml new file mode 100644 index 0000000..1c63169 --- /dev/null +++ b/content/meetups/800-july-2026.yaml @@ -0,0 +1,23 @@ +name: DevCongress Quarterly Meetup [online] +start: "2026-07-04T18:00:00+00:00" +end: "2026-07-04T21:00:00+00:00" +description: > + A casual virtual quarterly meetup for DevCongress members to chat about what + is happening in the ecosystem, catch up, and share knowledge with each other. + No agenda, no slides, no structure. Just casual banter and real talk. +cover: /images/quarterly-meetup-template.avif + +location: + label: Google Meet + name: Google Meet + url: https://luma.com/1e9h6c34 + +stream_url: null +registration_url: https://luma.com/1e9h6c34 + +speakers: [] + +schedule: [] + +photos: [] +videos: [] diff --git a/content/meetups/_template.yaml b/content/meetups/_template.yaml index 7ca8e1b..9c0b0ac 100644 --- a/content/meetups/_template.yaml +++ b/content/meetups/_template.yaml @@ -27,9 +27,9 @@ name: "City Meetup — Month Year" # Start and end datetimes in ISO 8601 with timezone offset. # Format: "YYYY-MM-DDTHH:MM:SS+HH:MM" # Examples: -# Accra (GMT+0): "2025-06-14T18:00:00+00:00" -# Lagos (GMT+1): "2025-06-14T18:00:00+01:00" -# Nairobi (GMT+3): "2025-06-14T18:00:00+03:00" +# Accra (UTC+0): "2025-06-14T18:00:00+00:00" +# Lagos (UTC+1): "2025-06-14T18:00:00+01:00" +# Nairobi (UTC+3): "2025-06-14T18:00:00+03:00" start: "2025-01-01T18:00:00+00:00" end: "2025-01-01T21:00:00+00:00" @@ -37,16 +37,19 @@ end: "2025-01-01T21:00:00+00:00" description: > A short description of this meetup. -# Cover image URL (Google Photos, Cloudinary, etc.) +# Cover image URL or site-local image path (Google Photos, Cloudinary, /images/file.jpg, etc.) cover: https://lh3.googleusercontent.com/your-cover-image # ── LOCATION ───────────────────────────────────────────────────────────────── location: + # Short venue label shown on cards and listing pages. + # Keep this compact, e.g. "Fido, Accra". + label: "Venue, City" # Venue display name name: "Venue Name, City" # OPTIONAL: Google Maps or any map URL. # Remove this line or set to null if no map link. - map_url: https://maps.google.com/?q=Venue+Name+City + url: https://maps.google.com/?q=Venue+Name+City # ── STREAM / RECORDING ─────────────────────────────────────────────────────── # OPTIONAL. One URL serves all three states: diff --git a/public/images/quarterly-april-meet-up.jpeg b/public/images/quarterly-april-meet-up.jpeg new file mode 100644 index 0000000..f0b3d52 Binary files /dev/null and b/public/images/quarterly-april-meet-up.jpeg differ diff --git a/public/images/quarterly-april-meetup-2.jpeg b/public/images/quarterly-april-meetup-2.jpeg new file mode 100644 index 0000000..1b723d7 Binary files /dev/null and b/public/images/quarterly-april-meetup-2.jpeg differ diff --git a/public/images/quarterly-meetup-template.avif b/public/images/quarterly-meetup-template.avif new file mode 100644 index 0000000..88e1e68 Binary files /dev/null and b/public/images/quarterly-meetup-template.avif differ diff --git a/src/components/MeetupsSection.astro b/src/components/MeetupsSection.astro index 512ed81..9ab7256 100644 --- a/src/components/MeetupsSection.astro +++ b/src/components/MeetupsSection.astro @@ -1,5 +1,5 @@ --- -interface MeetupLocation { name: string; map_url?: string | null; } +interface MeetupLocation { label?: string; name: string; url?: string | null; } interface Meetup { id: string; data: { @@ -80,7 +80,7 @@ const statusConfig = {
- {meetup.data.location.name} + {meetup.data.location.label ?? meetup.data.location.name}

{meetup.data.name} diff --git a/src/content.config.ts b/src/content.config.ts index 201d22e..76a4b8e 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -69,10 +69,13 @@ const meetups = defineCollection({ start: z.string().regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$/), end: z.string().regex(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{2}:\d{2}$/), description: z.string().min(10), - cover: z.string().url(), + cover: z.string().refine(v => v.startsWith('/') || URL.canParse(v), { + message: 'cover must be a relative path or full URL', + }), location: z.object({ + label: z.string().min(2).optional(), name: z.string().min(2), - map_url: z.string().url().nullable().optional(), + url: z.string().url().nullable().optional(), }), stream_url: z.string().url().nullable().optional(), embed_stream: z.boolean().optional().default(false), @@ -80,7 +83,9 @@ const meetups = defineCollection({ speakers: z.array(meetupSpeakerSchema).optional(), schedule: z.array(scheduleItemSchema).optional(), photos: z.array(z.object({ - url: z.string().url(), + url: z.string().refine(v => v.startsWith('/') || URL.canParse(v), { + message: 'photo url must be a relative path or full URL', + }), type: z.enum(['image', 'folder']).default('image'), })).optional(), videos: z.array(z.object({ diff --git a/src/pages/meetups/[slug].astro b/src/pages/meetups/[slug].astro index 4295537..d9849a9 100644 --- a/src/pages/meetups/[slug].astro +++ b/src/pages/meetups/[slug].astro @@ -20,6 +20,7 @@ const now = new Date(); const start = new Date(d.start); const end = new Date(d.end); const status = now < start ? 'upcoming' : now <= end ? 'live' : 'past'; +const schedulePeriod = d.name.toLowerCase().includes('quarterly') ? 'evening' : 'day'; function formatDate(iso: string): string { return new Date(iso).toLocaleDateString('en-GB', { @@ -29,7 +30,7 @@ function formatDate(iso: string): string { function formatTime(iso: string): string { return new Date(iso).toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit', timeZone: 'Africa/Accra', timeZoneName: 'short', - }); + }).replace('GMT', 'UTC'); } // ── Timezone helpers ──────────────────────────────────────── @@ -42,7 +43,8 @@ function parseTime12h(str: string): { h: number; m: number } | null { return { h, m: +m[2] }; } function scheduleToISO(dateISO: string, timeStr: string): string | null { - const p = parseTime12h(timeStr); + const startTime = timeStr.split(/\s[-–]\s/)[0]; + const p = parseTime12h(startTime); if (!p) return null; const d = new Date(dateISO); return new Date(Date.UTC(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate(), p.h, p.m)).toISOString(); @@ -90,8 +92,8 @@ const folderPhotos = photos.filter((photo) => photo.type === 'folder');

{d.name}

{formatDate(d.start)} · {formatTime(d.start)} - {d.location.map_url - ? + {d.location.url + ? 📍 {d.location.name} : 📍 {d.location.name} @@ -232,7 +234,7 @@ const folderPhotos = photos.filter((photo) => photo.type === 'folder');
{status === 'past' ? 'Recap' : 'Schedule'}
- Event Time (GMT+0) + Event Time (UTC+0) @@ -240,7 +242,7 @@ const folderPhotos = photos.filter((photo) => photo.type === 'folder');

- {status === 'past' ? 'How the day went' : 'How the day will go'} + {status === 'past' ? `How the ${schedulePeriod} went` : `How the ${schedulePeriod} will go`}

    {scheduleItems.map((item) => ( @@ -705,7 +707,8 @@ const folderPhotos = photos.filter((photo) => photo.type === 'folder'); } function formatTime(iso, tz) { const d = new Date(iso); - return d.toLocaleTimeString('en-GB', fmtOpts(tz, { hour: '2-digit', minute: '2-digit', timeZoneName: 'short' })); + return d.toLocaleTimeString('en-GB', fmtOpts(tz, { hour: '2-digit', minute: '2-digit', timeZoneName: 'short' })) + .replace('GMT', 'UTC'); } function getUserTZLabel() { @@ -713,7 +716,7 @@ const folderPhotos = photos.filter((photo) => photo.type === 'folder'); const parts = new Intl.DateTimeFormat('en', { timeZone: tz, timeZoneName: 'shortOffset', }).formatToParts(); - return parts.find(p => p.type === 'timeZoneName')?.value || tz; + return (parts.find(p => p.type === 'timeZoneName')?.value || tz).replace('GMT', 'UTC'); } function applyTimezone(tz) { diff --git a/src/pages/meetups/index.astro b/src/pages/meetups/index.astro index 0f18722..469ecce 100644 --- a/src/pages/meetups/index.astro +++ b/src/pages/meetups/index.astro @@ -74,7 +74,7 @@ const statusConfig = {
    - {meetup.data.location.name} + {meetup.data.location.label ?? meetup.data.location.name}

    {meetup.data.name}