diff --git a/.gitignore b/.gitignore
index 16d54bb..68cbb43 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,24 +1,24 @@
-# build output
-dist/
-# generated types
-.astro/
-
-# dependencies
-node_modules/
-
-# logs
-npm-debug.log*
-yarn-debug.log*
-yarn-error.log*
-pnpm-debug.log*
-
-
-# environment variables
-.env
-.env.production
-
-# macOS-specific files
-.DS_Store
-
-# jetbrains setting folder
-.idea/
+# build output
+dist/
+# generated types
+.astro/
+
+# dependencies
+node_modules/
+
+# logs
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+
+# environment variables
+
+# macOS-specific files
+.DS_Store
+
+# jetbrains setting folder
+.idea/
+config.bat
+.env
diff --git a/astro.config.mjs b/astro.config.mjs
index 4460d73..b22edfd 100644
--- a/astro.config.mjs
+++ b/astro.config.mjs
@@ -1,57 +1,57 @@
-// @ts-check
-import { defineConfig } from "astro/config";
-
-import tailwindcss from "@tailwindcss/vite";
-import react from "@astrojs/react";
-import partytown from "@astrojs/partytown";
-
-const REDIRECTS = {
- // call for volunteers
- "/volunteer": "https://forms.gle/TbPEKUg2eet3VWuF7",
- "/cfv": "/volunteer",
- // call for community partners
- "/cfcp": "https://forms.gle/pkZUerJzfvYYGJLs5",
- "/cfc": "/cfcp",
- "/cfp": "/cfcp",
- // call for speakers
- "/speak": "https://forms.gle/9NWA4PupC558Ery49",
- "/cfspk": "/speak",
- //call for sponsors
- "/sponsor": "https://forms.gle/5LkeXLPKezt3u3G78",
- "/cfs": "/sponsor",
- // call for evangelists
- "/evangelize": "https://forms.gle/3RCMnSiKfbq58o246",
- "/cfe": "/evangelize",
- // call for booth
- "/cfb": "https://forms.gle/KqF7erECvK12CkFr7",
-};
-
-// https://astro.build/config
-export default defineConfig({
- site: "https://osd.opensourceweekend.org",
- output: "static",
- redirects: REDIRECTS,
- image: {
- domains: ["cms.opensourceweekend.org"],
- },
- vite: {
- // @ts-ignore
- plugins: [tailwindcss()],
- ssr: {
- noExternal: ["react-easy-crop", "tslib"],
- },
- },
- server: {
- allowedHosts: [
- ".ngrok-free.app", // allow all ngrok domains
- ],
- },
- integrations: [
- react(),
- partytown({
- config: {
- forward: ["dataLayer.push"],
- },
- }),
- ],
-});
+// @ts-check
+import { defineConfig } from "astro/config";
+
+import tailwindcss from "@tailwindcss/vite";
+import react from "@astrojs/react";
+import partytown from "@astrojs/partytown";
+const REDIRECTS = {
+ // call for volunteers
+ "/volunteer": "https://forms.gle/TbPEKUg2eet3VWuF7",
+ "/cfv": "/volunteer",
+ // call for community partners
+ "/cfcp": "https://forms.gle/pkZUerJzfvYYGJLs5",
+ "/cfc": "/cfcp",
+ "/cfp": "/cfcp",
+ // call for speakers
+ "/speak": "https://forms.gle/9NWA4PupC558Ery49",
+ "/cfspk": "/speak",
+ //call for sponsors
+ "/sponsor": "https://forms.gle/5LkeXLPKezt3u3G78",
+ "/cfs": "/sponsor",
+ // call for evangelists
+ "/evangelize": "https://forms.gle/3RCMnSiKfbq58o246",
+ "/cfe": "/evangelize",
+ // call for booth
+ "/cfb": "https://forms.gle/KqF7erECvK12CkFr7",
+};
+
+// https://astro.build/config
+export default defineConfig({
+ site: "https://osd.opensourceweekend.org",
+ output: "static",
+ redirects: REDIRECTS,
+ image: {
+ domains: ["cms.opensourceweekend.org"],
+ },
+ vite: {
+ // @ts-ignore
+ plugins: [tailwindcss()],
+ ssr: {
+ noExternal: ["react-easy-crop", "tslib"],
+ },
+ },
+ server: {
+ allowedHosts: [
+ ".ngrok-free.app", // allow all ngrok domains
+ ],
+ },
+ integrations: [
+ react(),
+ partytown({
+ config: {
+ forward: ["dataLayer.push"],
+ },
+ }),
+ ],
+});
+
diff --git a/package-lock.json b/package-lock.json
index a797f9a..3625fe6 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -19,6 +19,7 @@
"graphql": "^16.13.1",
"graphql-request": "^7.4.0",
"gsap": "^3.13.0",
+ "lenis": "^1.3.19",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-easy-crop": "^5.5.2",
@@ -4418,6 +4419,31 @@
"node": ">=6"
}
},
+ "node_modules/lenis": {
+ "version": "1.3.19",
+ "resolved": "https://registry.npmjs.org/lenis/-/lenis-1.3.19.tgz",
+ "integrity": "sha512-SFSAWnkGWFyOryfnxc8MtLZiaxDt/vhTJ//7F/nGhrdzDjdqYeCpRk3ZBrqfmdNcjSYuJE4zsIY2x8ypiW01Uw==",
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/darkroomengineering"
+ },
+ "peerDependencies": {
+ "@nuxt/kit": ">=3.0.0",
+ "react": ">=17.0.0",
+ "vue": ">=3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@nuxt/kit": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "vue": {
+ "optional": true
+ }
+ }
+ },
"node_modules/lightningcss": {
"version": "1.30.1",
"resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz",
diff --git a/package.json b/package.json
index e22bc96..669755a 100644
--- a/package.json
+++ b/package.json
@@ -21,6 +21,7 @@
"graphql": "^16.13.1",
"graphql-request": "^7.4.0",
"gsap": "^3.13.0",
+ "lenis": "^1.3.19",
"react": "^19.1.1",
"react-dom": "^19.1.1",
"react-easy-crop": "^5.5.2",
diff --git a/public/osd-hero-high/00001.webp b/public/osd-hero-high/00001.webp
new file mode 100644
index 0000000..a803fa6
Binary files /dev/null and b/public/osd-hero-high/00001.webp differ
diff --git a/public/osd-hero-high/00002.webp b/public/osd-hero-high/00002.webp
new file mode 100644
index 0000000..f108abe
Binary files /dev/null and b/public/osd-hero-high/00002.webp differ
diff --git a/public/osd-hero-high/00003.webp b/public/osd-hero-high/00003.webp
new file mode 100644
index 0000000..ced26c5
Binary files /dev/null and b/public/osd-hero-high/00003.webp differ
diff --git a/public/osd-hero-high/00004.webp b/public/osd-hero-high/00004.webp
new file mode 100644
index 0000000..540f4e7
Binary files /dev/null and b/public/osd-hero-high/00004.webp differ
diff --git a/public/osd-hero-high/00005.webp b/public/osd-hero-high/00005.webp
new file mode 100644
index 0000000..636a4f8
Binary files /dev/null and b/public/osd-hero-high/00005.webp differ
diff --git a/public/osd-hero-high/00006.webp b/public/osd-hero-high/00006.webp
new file mode 100644
index 0000000..2cfd51f
Binary files /dev/null and b/public/osd-hero-high/00006.webp differ
diff --git a/public/osd-hero-high/00007.webp b/public/osd-hero-high/00007.webp
new file mode 100644
index 0000000..4426c16
Binary files /dev/null and b/public/osd-hero-high/00007.webp differ
diff --git a/public/osd-hero-high/00008.webp b/public/osd-hero-high/00008.webp
new file mode 100644
index 0000000..ac92913
Binary files /dev/null and b/public/osd-hero-high/00008.webp differ
diff --git a/public/osd-hero-high/00009.webp b/public/osd-hero-high/00009.webp
new file mode 100644
index 0000000..90ce42c
Binary files /dev/null and b/public/osd-hero-high/00009.webp differ
diff --git a/public/osd-hero-high/00010.webp b/public/osd-hero-high/00010.webp
new file mode 100644
index 0000000..d22daef
Binary files /dev/null and b/public/osd-hero-high/00010.webp differ
diff --git a/public/osd-hero-high/00011.webp b/public/osd-hero-high/00011.webp
new file mode 100644
index 0000000..3d64ea6
Binary files /dev/null and b/public/osd-hero-high/00011.webp differ
diff --git a/public/osd-hero-high/00012.webp b/public/osd-hero-high/00012.webp
new file mode 100644
index 0000000..dad0ec2
Binary files /dev/null and b/public/osd-hero-high/00012.webp differ
diff --git a/public/osd-hero-high/00013.webp b/public/osd-hero-high/00013.webp
new file mode 100644
index 0000000..b7a4026
Binary files /dev/null and b/public/osd-hero-high/00013.webp differ
diff --git a/public/osd-hero-high/00014.webp b/public/osd-hero-high/00014.webp
new file mode 100644
index 0000000..92dfdd3
Binary files /dev/null and b/public/osd-hero-high/00014.webp differ
diff --git a/public/osd-hero-high/00015.webp b/public/osd-hero-high/00015.webp
new file mode 100644
index 0000000..44ed51f
Binary files /dev/null and b/public/osd-hero-high/00015.webp differ
diff --git a/public/osd-hero-high/00016.webp b/public/osd-hero-high/00016.webp
new file mode 100644
index 0000000..94edd23
Binary files /dev/null and b/public/osd-hero-high/00016.webp differ
diff --git a/public/osd-hero-high/00017.webp b/public/osd-hero-high/00017.webp
new file mode 100644
index 0000000..f15043e
Binary files /dev/null and b/public/osd-hero-high/00017.webp differ
diff --git a/public/osd-hero-high/00018.webp b/public/osd-hero-high/00018.webp
new file mode 100644
index 0000000..8fb932a
Binary files /dev/null and b/public/osd-hero-high/00018.webp differ
diff --git a/public/osd-hero-high/00019.webp b/public/osd-hero-high/00019.webp
new file mode 100644
index 0000000..b0a548a
Binary files /dev/null and b/public/osd-hero-high/00019.webp differ
diff --git a/public/osd-hero-high/00020.webp b/public/osd-hero-high/00020.webp
new file mode 100644
index 0000000..028430f
Binary files /dev/null and b/public/osd-hero-high/00020.webp differ
diff --git a/public/osd-hero-high/00021.webp b/public/osd-hero-high/00021.webp
new file mode 100644
index 0000000..b61e9c7
Binary files /dev/null and b/public/osd-hero-high/00021.webp differ
diff --git a/public/osd-hero-high/00022.webp b/public/osd-hero-high/00022.webp
new file mode 100644
index 0000000..dc6110d
Binary files /dev/null and b/public/osd-hero-high/00022.webp differ
diff --git a/public/osd-hero-high/00023.webp b/public/osd-hero-high/00023.webp
new file mode 100644
index 0000000..bde55b5
Binary files /dev/null and b/public/osd-hero-high/00023.webp differ
diff --git a/public/osd-hero-high/00024.webp b/public/osd-hero-high/00024.webp
new file mode 100644
index 0000000..20e6b09
Binary files /dev/null and b/public/osd-hero-high/00024.webp differ
diff --git a/public/osd-hero-high/00025.webp b/public/osd-hero-high/00025.webp
new file mode 100644
index 0000000..3771533
Binary files /dev/null and b/public/osd-hero-high/00025.webp differ
diff --git a/public/osd-hero-high/00026.webp b/public/osd-hero-high/00026.webp
new file mode 100644
index 0000000..fe1700f
Binary files /dev/null and b/public/osd-hero-high/00026.webp differ
diff --git a/public/osd-hero-high/00027.webp b/public/osd-hero-high/00027.webp
new file mode 100644
index 0000000..c127794
Binary files /dev/null and b/public/osd-hero-high/00027.webp differ
diff --git a/public/osd-hero-high/00028.webp b/public/osd-hero-high/00028.webp
new file mode 100644
index 0000000..4b30fac
Binary files /dev/null and b/public/osd-hero-high/00028.webp differ
diff --git a/public/osd-hero-high/00029.webp b/public/osd-hero-high/00029.webp
new file mode 100644
index 0000000..1e2d971
Binary files /dev/null and b/public/osd-hero-high/00029.webp differ
diff --git a/public/osd-hero-high/00030.webp b/public/osd-hero-high/00030.webp
new file mode 100644
index 0000000..dcafb44
Binary files /dev/null and b/public/osd-hero-high/00030.webp differ
diff --git a/public/osd-hero-high/00031.webp b/public/osd-hero-high/00031.webp
new file mode 100644
index 0000000..fe6a14c
Binary files /dev/null and b/public/osd-hero-high/00031.webp differ
diff --git a/public/osd-hero-high/00032.webp b/public/osd-hero-high/00032.webp
new file mode 100644
index 0000000..0a92e74
Binary files /dev/null and b/public/osd-hero-high/00032.webp differ
diff --git a/public/osd-hero-high/00033.webp b/public/osd-hero-high/00033.webp
new file mode 100644
index 0000000..a27efcf
Binary files /dev/null and b/public/osd-hero-high/00033.webp differ
diff --git a/public/osd-hero-high/00034.webp b/public/osd-hero-high/00034.webp
new file mode 100644
index 0000000..5b9e5e2
Binary files /dev/null and b/public/osd-hero-high/00034.webp differ
diff --git a/public/osd-hero-high/00035.webp b/public/osd-hero-high/00035.webp
new file mode 100644
index 0000000..9edd024
Binary files /dev/null and b/public/osd-hero-high/00035.webp differ
diff --git a/public/osd-hero-high/00036.webp b/public/osd-hero-high/00036.webp
new file mode 100644
index 0000000..c5e1761
Binary files /dev/null and b/public/osd-hero-high/00036.webp differ
diff --git a/public/osd-hero-high/00037.webp b/public/osd-hero-high/00037.webp
new file mode 100644
index 0000000..db83c99
Binary files /dev/null and b/public/osd-hero-high/00037.webp differ
diff --git a/public/osd-hero-high/00038.webp b/public/osd-hero-high/00038.webp
new file mode 100644
index 0000000..c1b9283
Binary files /dev/null and b/public/osd-hero-high/00038.webp differ
diff --git a/public/osd-hero-high/00039.webp b/public/osd-hero-high/00039.webp
new file mode 100644
index 0000000..f01d7b9
Binary files /dev/null and b/public/osd-hero-high/00039.webp differ
diff --git a/public/osd-hero-high/00040.webp b/public/osd-hero-high/00040.webp
new file mode 100644
index 0000000..15c9e14
Binary files /dev/null and b/public/osd-hero-high/00040.webp differ
diff --git a/public/osd-hero-high/00041.webp b/public/osd-hero-high/00041.webp
new file mode 100644
index 0000000..a099972
Binary files /dev/null and b/public/osd-hero-high/00041.webp differ
diff --git a/public/osd-hero-high/00042.webp b/public/osd-hero-high/00042.webp
new file mode 100644
index 0000000..bcbea18
Binary files /dev/null and b/public/osd-hero-high/00042.webp differ
diff --git a/public/osd-hero-high/00043.webp b/public/osd-hero-high/00043.webp
new file mode 100644
index 0000000..f7232bc
Binary files /dev/null and b/public/osd-hero-high/00043.webp differ
diff --git a/public/osd-hero-high/00044.webp b/public/osd-hero-high/00044.webp
new file mode 100644
index 0000000..d04eae2
Binary files /dev/null and b/public/osd-hero-high/00044.webp differ
diff --git a/public/osd-hero-high/00045.webp b/public/osd-hero-high/00045.webp
new file mode 100644
index 0000000..c2ce28d
Binary files /dev/null and b/public/osd-hero-high/00045.webp differ
diff --git a/public/osd-hero-high/00046.webp b/public/osd-hero-high/00046.webp
new file mode 100644
index 0000000..8e6b38f
Binary files /dev/null and b/public/osd-hero-high/00046.webp differ
diff --git a/public/osd-hero-high/00047.webp b/public/osd-hero-high/00047.webp
new file mode 100644
index 0000000..ee5b2ca
Binary files /dev/null and b/public/osd-hero-high/00047.webp differ
diff --git a/public/osd-hero-high/00048.webp b/public/osd-hero-high/00048.webp
new file mode 100644
index 0000000..3bd8660
Binary files /dev/null and b/public/osd-hero-high/00048.webp differ
diff --git a/public/osd-hero-high/00049.webp b/public/osd-hero-high/00049.webp
new file mode 100644
index 0000000..d893240
Binary files /dev/null and b/public/osd-hero-high/00049.webp differ
diff --git a/public/osd-hero-high/00050.webp b/public/osd-hero-high/00050.webp
new file mode 100644
index 0000000..0c333ea
Binary files /dev/null and b/public/osd-hero-high/00050.webp differ
diff --git a/public/osd-hero-high/00051.webp b/public/osd-hero-high/00051.webp
new file mode 100644
index 0000000..f3cc183
Binary files /dev/null and b/public/osd-hero-high/00051.webp differ
diff --git a/public/osd-hero-high/00052.webp b/public/osd-hero-high/00052.webp
new file mode 100644
index 0000000..fbdd6b1
Binary files /dev/null and b/public/osd-hero-high/00052.webp differ
diff --git a/public/osd-hero-high/00053.webp b/public/osd-hero-high/00053.webp
new file mode 100644
index 0000000..7be3f46
Binary files /dev/null and b/public/osd-hero-high/00053.webp differ
diff --git a/public/osd-hero-high/00054.webp b/public/osd-hero-high/00054.webp
new file mode 100644
index 0000000..b029258
Binary files /dev/null and b/public/osd-hero-high/00054.webp differ
diff --git a/public/osd-hero-high/00055.webp b/public/osd-hero-high/00055.webp
new file mode 100644
index 0000000..562f0e3
Binary files /dev/null and b/public/osd-hero-high/00055.webp differ
diff --git a/public/osd-hero-high/00056.webp b/public/osd-hero-high/00056.webp
new file mode 100644
index 0000000..7d0b26d
Binary files /dev/null and b/public/osd-hero-high/00056.webp differ
diff --git a/public/osd-hero-high/00057.webp b/public/osd-hero-high/00057.webp
new file mode 100644
index 0000000..775ff85
Binary files /dev/null and b/public/osd-hero-high/00057.webp differ
diff --git a/public/osd-hero-high/00058.webp b/public/osd-hero-high/00058.webp
new file mode 100644
index 0000000..927bd6d
Binary files /dev/null and b/public/osd-hero-high/00058.webp differ
diff --git a/public/osd-hero-high/00059.webp b/public/osd-hero-high/00059.webp
new file mode 100644
index 0000000..cd17f5a
Binary files /dev/null and b/public/osd-hero-high/00059.webp differ
diff --git a/public/osd-hero-high/00060.webp b/public/osd-hero-high/00060.webp
new file mode 100644
index 0000000..ed8d97b
Binary files /dev/null and b/public/osd-hero-high/00060.webp differ
diff --git a/public/osd-hero-high/00061.webp b/public/osd-hero-high/00061.webp
new file mode 100644
index 0000000..d422ec9
Binary files /dev/null and b/public/osd-hero-high/00061.webp differ
diff --git a/public/osd-hero-high/00062.webp b/public/osd-hero-high/00062.webp
new file mode 100644
index 0000000..6c67d82
Binary files /dev/null and b/public/osd-hero-high/00062.webp differ
diff --git a/public/osd-hero-high/00063.webp b/public/osd-hero-high/00063.webp
new file mode 100644
index 0000000..da78599
Binary files /dev/null and b/public/osd-hero-high/00063.webp differ
diff --git a/public/osd-hero-high/00064.webp b/public/osd-hero-high/00064.webp
new file mode 100644
index 0000000..5efe86e
Binary files /dev/null and b/public/osd-hero-high/00064.webp differ
diff --git a/public/osd-hero-high/00065.webp b/public/osd-hero-high/00065.webp
new file mode 100644
index 0000000..a50c878
Binary files /dev/null and b/public/osd-hero-high/00065.webp differ
diff --git a/public/osd-hero-high/00066.webp b/public/osd-hero-high/00066.webp
new file mode 100644
index 0000000..0e08872
Binary files /dev/null and b/public/osd-hero-high/00066.webp differ
diff --git a/public/osd-hero-high/00067.webp b/public/osd-hero-high/00067.webp
new file mode 100644
index 0000000..51191b9
Binary files /dev/null and b/public/osd-hero-high/00067.webp differ
diff --git a/public/osd-hero-high/00068.webp b/public/osd-hero-high/00068.webp
new file mode 100644
index 0000000..860dc9d
Binary files /dev/null and b/public/osd-hero-high/00068.webp differ
diff --git a/public/osd-hero-high/00069.webp b/public/osd-hero-high/00069.webp
new file mode 100644
index 0000000..90ef8a0
Binary files /dev/null and b/public/osd-hero-high/00069.webp differ
diff --git a/public/osd-hero-high/00070.webp b/public/osd-hero-high/00070.webp
new file mode 100644
index 0000000..38bcef4
Binary files /dev/null and b/public/osd-hero-high/00070.webp differ
diff --git a/public/osd-hero-high/00071.webp b/public/osd-hero-high/00071.webp
new file mode 100644
index 0000000..c25a42e
Binary files /dev/null and b/public/osd-hero-high/00071.webp differ
diff --git a/public/osd-hero-high/00072.webp b/public/osd-hero-high/00072.webp
new file mode 100644
index 0000000..7835663
Binary files /dev/null and b/public/osd-hero-high/00072.webp differ
diff --git a/public/osd-hero-high/00073.webp b/public/osd-hero-high/00073.webp
new file mode 100644
index 0000000..cb71023
Binary files /dev/null and b/public/osd-hero-high/00073.webp differ
diff --git a/public/osd-hero-high/00074.webp b/public/osd-hero-high/00074.webp
new file mode 100644
index 0000000..c0217d0
Binary files /dev/null and b/public/osd-hero-high/00074.webp differ
diff --git a/public/osd-hero-high/00075.webp b/public/osd-hero-high/00075.webp
new file mode 100644
index 0000000..90f9158
Binary files /dev/null and b/public/osd-hero-high/00075.webp differ
diff --git a/public/osd-hero-high/00076.webp b/public/osd-hero-high/00076.webp
new file mode 100644
index 0000000..734dff0
Binary files /dev/null and b/public/osd-hero-high/00076.webp differ
diff --git a/public/osd-hero-high/00077.webp b/public/osd-hero-high/00077.webp
new file mode 100644
index 0000000..97c4939
Binary files /dev/null and b/public/osd-hero-high/00077.webp differ
diff --git a/public/osd-hero-high/00078.webp b/public/osd-hero-high/00078.webp
new file mode 100644
index 0000000..06f137a
Binary files /dev/null and b/public/osd-hero-high/00078.webp differ
diff --git a/public/osd-hero-high/00079.webp b/public/osd-hero-high/00079.webp
new file mode 100644
index 0000000..2583789
Binary files /dev/null and b/public/osd-hero-high/00079.webp differ
diff --git a/public/osd-hero-high/00080.webp b/public/osd-hero-high/00080.webp
new file mode 100644
index 0000000..0feeb0e
Binary files /dev/null and b/public/osd-hero-high/00080.webp differ
diff --git a/src/components/Footer.astro b/src/components/Footer.astro
index 79a061d..1519924 100644
--- a/src/components/Footer.astro
+++ b/src/components/Footer.astro
@@ -1,75 +1,75 @@
----
-import { Image } from "astro:assets";
-import { FOOTER, BRANDING, SITE, SOCIAL_LINKS, CONTACTS, NAVIGATION } from "../config/config.ts";
----
-
-
-
-
-
-
-
-
- {SITE.shortTitle}
-
-
- {FOOTER.description}
-
-
- {SOCIAL_LINKS.map((media) => (
-
-
-
- ))}
-
-
-
-
-
-
Quick Links
-
- {NAVIGATION.items.slice(0, 5).map(item => (
-
-
- {item.name}
-
-
- ))}
-
-
-
-
-
-
-
-
-
-
- © {new Date().getFullYear()} Open Source Weekend. All rights reserved.
-
-
- Made with ❤️ by
-
- OSW Community
-
-
-
-
-
+---
+import { Image } from "astro:assets";
+import { FOOTER, BRANDING, SITE, SOCIAL_LINKS, CONTACTS, NAVIGATION } from "../config/config.ts";
+---
+
+
+
+
+
+
+
+
+ {SITE.shortTitle}
+
+
+ {FOOTER.description}
+
+
+ {SOCIAL_LINKS.map((media) => (
+
+
+
+ ))}
+
+
+
+
+
+
Quick Links
+
+ {NAVIGATION.items.slice(0, 5).map(item => (
+
+
+ {item.name}
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+ © {new Date().getFullYear()} Open Source Weekend. All rights reserved.
+
+
+ Made with ❤️ by
+
+ OSW Community
+
+
+
+
+
diff --git a/src/components/Hero.jsx b/src/components/Hero.jsx
index 7f1aa0b..859ea26 100644
--- a/src/components/Hero.jsx
+++ b/src/components/Hero.jsx
@@ -1,79 +1,79 @@
-import { SITE } from "@/config/config.ts";
-import { useEffect, useRef } from "react";
-
-const Hero = () => {
- const sectionRef = useRef(null);
-
- useEffect(() => {
- const section = sectionRef.current;
- if (!section) return;
- // Fade in on mount
- section.style.opacity = "0";
- requestAnimationFrame(() => {
- section.style.transition = "opacity 0.8s ease-out";
- section.style.opacity = "1";
- });
- }, []);
-
- return (
-
- {/* Animated Background Blobs — clipped via a wrapping div so they don't overflow page */}
-
-
- {/* Content */}
-
-
- {/* Status Badge */}
-
-
-
-
-
- 04 April 2026 · {SITE.city}
-
-
- {/* Title — pb-4 prevents italic descender clipping */}
-
- Open Source Day
- 2026
-
-
-
- India's largest open source conference. 1000+ developers, builders & maintainers — one unforgettable day.
-
-
-
-
-
- {/* Hashtag Footer */}
-
-
#OSDIn2026
-
#OSDIndia2026
-
#OpenSourceDay
-
-
-
- );
-};
-
-export default Hero;
+import { SITE } from "@/config/config.ts";
+import { useEffect, useRef } from "react";
+
+const Hero = () => {
+ const sectionRef = useRef(null);
+
+ useEffect(() => {
+ const section = sectionRef.current;
+ if (!section) return;
+ // Fade in on mount
+ section.style.opacity = "0";
+ requestAnimationFrame(() => {
+ section.style.transition = "opacity 0.8s ease-out";
+ section.style.opacity = "1";
+ });
+ }, []);
+
+ return (
+
+ {/* Animated Background Blobs — clipped via a wrapping div so they don't overflow page */}
+
+
+ {/* Content */}
+
+
+ {/* Status Badge */}
+
+
+
+
+
+ 04 April 2026 · {SITE.city}
+
+
+ {/* Title — pb-4 prevents italic descender clipping */}
+
+ Open Source Day
+ 2026
+
+
+
+ India's largest open source conference. 1000+ developers, builders & maintainers — one unforgettable day.
+
+
+
+
+
+ {/* Hashtag Footer */}
+
+
#OSDIn2026
+
#OSDIndia2026
+
#OpenSourceDay
+
+
+
+ );
+};
+
+export default Hero;
diff --git a/src/components/MascotScroller.jsx b/src/components/MascotScroller.jsx
new file mode 100644
index 0000000..890c44f
--- /dev/null
+++ b/src/components/MascotScroller.jsx
@@ -0,0 +1,498 @@
+import { useEffect, useRef, useState } from "react";
+
+const TOTAL_FRAMES = 80;
+const BG_COLOR = "#161820";
+
+// Frame URL builder — served from /public/osd-hero-high/
+const frameUrl = (i) => `/osd-hero-high/${String(i + 1).padStart(5, "0")}.webp`;
+
+// Copy overlay phases keyed by scroll progress
+const PHASES = [
+ {
+ start: 0,
+ end: 0.18,
+ heading: "Meet your new open source ally.",
+ sub: null,
+ align: "center",
+ accentColor: "#00D6FF",
+ },
+ {
+ start: 0.2,
+ end: 0.58,
+ heading: "Built for builders.",
+ sub: "Crafted by the community, for the community.",
+ align: "left",
+ accentColor: "#0050FF",
+ },
+ {
+ start: 0.62,
+ end: 0.88,
+ heading: "Open source runs deep.",
+ sub: "Every contribution shapes who we are.",
+ align: "right",
+ accentColor: "#00D6FF",
+ },
+ {
+ start: 0.91,
+ end: 1,
+ heading: "OSD 2026 — Ship. Together.",
+ sub: null,
+ align: "center",
+ isCta: true,
+ accentColor: "#0050FF",
+ },
+];
+
+function getPhaseOpacity(phase, progress) {
+ const fadeLen = 0.04;
+ if (progress < phase.start || progress > phase.end) return 0;
+ const fadeInEnd = phase.start + fadeLen;
+ const fadeOutStart = phase.end - fadeLen;
+ if (progress < fadeInEnd) return (progress - phase.start) / fadeLen;
+ if (progress > fadeOutStart) return (phase.end - progress) / fadeLen;
+ return 1;
+}
+
+export default function MascotScroller() {
+ const canvasRef = useRef(null);
+ const containerRef = useRef(null);
+ const imagesRef = useRef([]);
+ const frameRef = useRef(0);
+ const rafRef = useRef(null);
+ const logoRef = useRef(null);
+ const [loadProgress, setLoadProgress] = useState(0);
+ const [ready, setReady] = useState(false);
+ const [scrollProgress, setScrollProgress] = useState(0);
+
+ // Preload all frames
+ useEffect(() => {
+ // Load OSD Logo for watermark
+ const logoImg = new Image();
+ logoImg.src = "/icons/OSDGreen.svg";
+ logoRef.current = logoImg;
+
+ const images = new Array(TOTAL_FRAMES);
+ let loaded = 0;
+
+ const onLoad = () => {
+ loaded++;
+ const pct = loaded / TOTAL_FRAMES;
+ setLoadProgress(pct);
+ if (pct >= 0.85) setReady(true);
+ };
+
+ for (let i = 0; i < TOTAL_FRAMES; i++) {
+ const img = new Image();
+ img.onload = onLoad;
+ img.onerror = onLoad; // count errors so we don't hang
+ img.src = frameUrl(i);
+ images[i] = img;
+ }
+
+ imagesRef.current = images;
+ }, []);
+
+ // Draw current frame to canvas
+ const drawFrame = (index) => {
+ const canvas = canvasRef.current;
+ if (!canvas) return;
+ const img = imagesRef.current[index];
+ if (!img || !img.complete || !img.naturalWidth) return;
+ const ctx = canvas.getContext("2d");
+ const dpr = window.devicePixelRatio || 1;
+
+ // Size canvas to container maintaining 16:9
+ const w = canvas.parentElement.clientWidth;
+ const h = canvas.parentElement.clientHeight;
+ const imgAspect = img.naturalWidth / img.naturalHeight;
+ const containerAspect = w / h;
+
+ let drawW, drawH, dx, dy;
+
+ // Always use object-fit: cover behavior.
+ if (containerAspect > imgAspect) {
+ // Container is wider than image aspect ratio: fit width and crop height.
+ drawW = w;
+ drawH = drawW / imgAspect;
+ } else {
+ // Container is taller than image aspect ratio (e.g. mobile portrait): fit height and crop width.
+ drawH = h;
+ drawW = drawH * imgAspect;
+ }
+ dx = (w - drawW) / 2;
+ dy = (h - drawH) / 2;
+
+ canvas.width = w * dpr;
+ canvas.height = h * dpr;
+ canvas.style.width = w + "px";
+ canvas.style.height = h + "px";
+ ctx.scale(dpr, dpr);
+ ctx.fillStyle = BG_COLOR;
+ ctx.fillRect(0, 0, w, h);
+ ctx.drawImage(img, dx, dy, drawW, drawH);
+
+ // ─────────────────────────────────────────────────────────
+ // Overlay OSD logo to hide the Veo watermark at bottom right of the image
+ // Sizing relative to the VISIBLE screen width (w), rather than the potentially heavily-scaled
+ // video frame (drawW) - this prevents it becoming massive on mobile tall screens.
+
+ const isMobile = containerAspect < 1; // Basic portrait check
+ const scaleFactor = isMobile ? h : w; // Use height as scale base on mobile as it dominates
+
+ // Calculate logo size keeping it reasonable on both mobile and desktop
+ const logoW = drawW * (isMobile ? 0.05 : 0.06);
+ const logoH = logoW;
+
+ // Padding to position perfectly over Veo
+ const paddingX = drawW * 0.005;
+ const paddingY = drawH * 0.02;
+
+ // "Veo" is at the bottom right of the ORIGINAL frame
+ const logoX = dx + drawW - logoW - paddingX;
+ const logoY = dy + drawH - logoH - paddingY;
+
+ // Draw a dark pill/circle to completely mask the "Veo" text
+ ctx.fillStyle = BG_COLOR;
+ ctx.beginPath();
+ ctx.arc(logoX + logoW / 2, logoY + logoH / 2, logoW / 2 + drawW * 0.008, 0, 2 * Math.PI);
+ ctx.fill();
+
+ if (logoRef.current && logoRef.current.complete) {
+ ctx.drawImage(logoRef.current, logoX, logoY, logoW, logoH);
+ }
+ };
+
+ // GSAP ScrollTrigger scroll driver
+ useEffect(() => {
+ if (!ready) return;
+
+ let gsapAPI, lenis, tickerWrap;
+
+ const init = async () => {
+ const gsapMod = await import("gsap");
+ const stMod = await import("gsap/ScrollTrigger");
+ const gsap = gsapMod.gsap;
+ const ScrollTrigger = stMod.ScrollTrigger;
+ gsapAPI = gsap;
+ gsap.registerPlugin(ScrollTrigger);
+
+ // Initialize Lenis for smooth scrolling
+ const LenisMod = await import("lenis");
+ const Lenis = LenisMod.default || LenisMod.Lenis || LenisMod;
+ lenis = new (Lenis.default || Lenis)({
+ autoRaf: false, // using GSAP ticker
+ });
+
+ lenis.on("scroll", ScrollTrigger.update);
+
+ tickerWrap = (time) => {
+ lenis.raf(time * 1000);
+ };
+
+ gsap.ticker.add(tickerWrap);
+ gsap.ticker.lagSmoothing(0);
+
+ const obj = { frame: 0, progress: 0 };
+
+ gsap.to(obj, {
+ frame: TOTAL_FRAMES - 1,
+ progress: 1,
+ ease: "none",
+ scrollTrigger: {
+ trigger: containerRef.current,
+ start: "top top",
+ end: "bottom bottom",
+ scrub: true,
+ onUpdate: (self) => {
+ const f = Math.round(obj.frame);
+ if (f !== frameRef.current) {
+ frameRef.current = f;
+ cancelAnimationFrame(rafRef.current);
+ rafRef.current = requestAnimationFrame(() => drawFrame(f));
+ }
+ setScrollProgress(self.progress);
+ },
+ },
+ });
+
+ // Draw first frame immediately
+ drawFrame(0);
+ };
+
+ init();
+
+ return () => {
+ cancelAnimationFrame(rafRef.current);
+ if (lenis) lenis.destroy();
+ if (gsapAPI && tickerWrap) gsapAPI.ticker.remove(tickerWrap);
+ };
+ }, [ready]);
+
+ // Redraw on resize
+ useEffect(() => {
+ const onResize = () => drawFrame(frameRef.current);
+ window.addEventListener("resize", onResize);
+ return () => window.removeEventListener("resize", onResize);
+ }, []);
+
+ return (
+
+ {/* Sticky viewport */}
+
+ {/* Loading state */}
+ {!ready && (
+
+
+ Loading experience
+
+
+
+ )}
+
+ {/* Canvas */}
+
+
+ {/* Copy overlays — all phases */}
+ {PHASES.map((phase, i) => {
+ const opacity = getPhaseOpacity(phase, scrollProgress);
+ if (opacity <= 0) return null;
+
+ const posStyle =
+ phase.align === "left"
+ ? {
+ left: "clamp(24px, 6vw, 80px)",
+ right: "auto",
+ textAlign: "left",
+ }
+ : phase.align === "right"
+ ? {
+ right: "clamp(24px, 6vw, 80px)",
+ left: "auto",
+ textAlign: "right",
+ }
+ : {
+ left: "50%",
+ transform: "translateX(-50%)",
+ textAlign: "center",
+ };
+
+ return (
+
+ {/* Thin accent line */}
+
+
+
+ {phase.heading}
+
+
+ {phase.sub && (
+
+ {phase.sub}
+
+ )}
+
+ {phase.isCta && (
+
{
+ e.currentTarget.style.transform = "scale(1.04)";
+ e.currentTarget.style.boxShadow = "0 0 48px rgba(0,80,255,0.7), 0 0 96px rgba(0,214,255,0.35)";
+ }}
+ onMouseLeave={(e) => {
+ e.currentTarget.style.transform = "scale(1)";
+ e.currentTarget.style.boxShadow = "0 0 32px rgba(0, 80, 255, 0.5), 0 0 64px rgba(0, 214, 255, 0.2)";
+ }}
+ >
+ Explore OSD 2025
+
+
+
+
+ )}
+
+ );
+ })}
+
+ {/* Scroll hint — fades out after 5% progress */}
+
+
+ {/* Progress bar at bottom edge */}
+
+
+
+
+
+ );
+}
diff --git a/src/components/Navigation.jsx b/src/components/Navigation.jsx
index 4003045..6a1601e 100644
--- a/src/components/Navigation.jsx
+++ b/src/components/Navigation.jsx
@@ -1,143 +1,143 @@
-import { useEffect, useState } from "react";
-import { BRANDING, NAVIGATION, SITE } from "@/config/config";
-
-const Navigation = (props) => {
- const { activePath = "" } = props;
-
- const [isOpen, setIsOpen] = useState(false);
- const [scrolled, setScrolled] = useState(false);
-
- useEffect(() => {
- const handleScroll = () => {
- setScrolled(window.scrollY > 50);
- };
-
- window.addEventListener("scroll", handleScroll);
- return () => window.removeEventListener("scroll", handleScroll);
- }, []);
-
- return (
-
-
-
-
-
- {/* Desktop navigation */}
-
- {NAVIGATION.items.map((item) => {
- const isTickets = item.name.toLowerCase() === "tickets";
- const isActivePath = item.href === activePath;
- return (
-
- {item.name}
- {!isTickets && (
-
- )}
-
- );
- })}
-
-
-
-
- {/* Mobile menu button */}
-
-
setIsOpen(!isOpen)}
- className="text-black hover:text-green-600 transition-colors"
- >
-
- {isOpen ? (
-
- ) : (
-
- )}
-
-
-
-
-
- {/* Mobile Navigation */}
- {isOpen && (
-
- )}
-
-
- );
-};
-
-export default Navigation;
+import { useEffect, useState } from "react";
+import { BRANDING, NAVIGATION, SITE } from "@/config/config";
+
+const Navigation = (props) => {
+ const { activePath = "" } = props;
+
+ const [isOpen, setIsOpen] = useState(false);
+ const [scrolled, setScrolled] = useState(false);
+
+ useEffect(() => {
+ const handleScroll = () => {
+ setScrolled(window.scrollY > 50);
+ };
+
+ window.addEventListener("scroll", handleScroll);
+ return () => window.removeEventListener("scroll", handleScroll);
+ }, []);
+
+ return (
+
+
+
+
+
+ {/* Desktop navigation */}
+
+ {NAVIGATION.items.map((item) => {
+ const isTickets = item.name.toLowerCase() === "tickets";
+ const isActivePath = item.href === activePath;
+ return (
+
+ {item.name}
+ {!isTickets && (
+
+ )}
+
+ );
+ })}
+
+
+
+
+ {/* Mobile menu button */}
+
+
setIsOpen(!isOpen)}
+ className="text-black hover:text-green-600 transition-colors"
+ >
+
+ {isOpen ? (
+
+ ) : (
+
+ )}
+
+
+
+
+
+ {/* Mobile Navigation */}
+ {isOpen && (
+
+ )}
+
+
+ );
+};
+
+export default Navigation;
diff --git a/src/components/Speaker.astro b/src/components/Speaker.astro
index 4964547..7dafa70 100644
--- a/src/components/Speaker.astro
+++ b/src/components/Speaker.astro
@@ -1,126 +1,126 @@
----
-import type { ResolvedSpeaker, ResolvedSpeakerSection } from "@/types/speakers.types.ts"
-import { Image } from "astro:assets"
-
-
-type Props = {
- speakers: ResolvedSpeaker[]
-}
-
-const {speakers} = Astro.props
-
----
-
-
- {speakers.map((speaker: ResolvedSpeaker) => (
-
-
-
-
-
-
-
-
-
-
-
- {speaker.name}
-
-
- {speaker.position?.trim() ?? ""}{speaker.position && speaker.company ? " at " : ""}{speaker.company?.trim()}
-
-
- {speaker.event && (
-
-
- {speaker.event.trim()}
-
- )}
-
-
-
- {speaker.presentationTitle && (
-
- {speaker.presentationTitle.trim()}
-
- )}
-
-
- {speaker.tags.length > 0 && (
-
- {speaker.tags.map((tag) => (
- tag.tagName && (
-
- {tag.tagName.trim()}
-
- )
- ))}
-
- )}
-
-
- {speaker.presentationLink && (
-
-
-
-
- Presentation
-
- )}
-
-
- ))}
-
+---
+import type { ResolvedSpeaker, ResolvedSpeakerSection } from "@/types/speakers.types.ts"
+import { Image } from "astro:assets"
+
+
+type Props = {
+ speakers: ResolvedSpeaker[]
+}
+
+const {speakers} = Astro.props
+
+---
+
+
+ {speakers.map((speaker: ResolvedSpeaker) => (
+
+
+
+
+
+
+
+
+
+
+
+ {speaker.name}
+
+
+ {speaker.position?.trim() ?? ""}{speaker.position && speaker.company ? " at " : ""}{speaker.company?.trim()}
+
+
+ {speaker.event && (
+
+
+ {speaker.event.trim()}
+
+ )}
+
+
+
+ {speaker.presentationTitle && (
+
+ {speaker.presentationTitle.trim()}
+
+ )}
+
+
+ {speaker.tags.length > 0 && (
+
+ {speaker.tags.map((tag) => (
+ tag.tagName && (
+
+ {tag.tagName.trim()}
+
+ )
+ ))}
+
+ )}
+
+
+ {speaker.presentationLink && (
+
+
+
+
+ Presentation
+
+ )}
+
+
+ ))}
+
diff --git a/src/config/config.ts b/src/config/config.ts
index a84d1d4..670f2bf 100644
--- a/src/config/config.ts
+++ b/src/config/config.ts
@@ -1,822 +1,822 @@
-import FacebookIcon from "@/assets/icons/facebook.svg";
-import LinkedInIcon from "@/assets/icons/footer-linkedin.svg";
-import GithubIcon from "@/assets/icons/github.svg";
-import InstagramIcon from "@/assets/icons/instagram.svg";
-import Mail from "@/assets/icons/mail.svg";
-import MediumIcon from "@/assets/icons/medium.svg";
-import Phone from "@/assets/icons/phone.svg";
-import TwitterIcon from "@/assets/icons/x.svg";
-import OSDGreen from "@/assets/icons/OSDGreen.svg";
-import OSWBlack from "@/assets/icons/OSWBlack.svg";
-
-export const SITE = {
- title: "2026 OpenSourceDay",
- shortTitle: "OSD2026",
- description: "OpenSourceDay 2026 - Join us for the next chapter of open source innovation, learning, and community building.",
- website: "https://osd.opensourceweekend.org",
- ogImage: "https://osd.opensourceweekend.org/images/Viral_Parmar_Stage.jpg",
- icon: OSDGreen,
- city: "Gandhinagar",
-};
-
-export const BRANDING = {
- logos: {
- main: OSDGreen,
- },
-};
-
-export const EVENT = {
- name: "Open Source Day 2026",
- shortName: "OSD2026",
- date: "TBA",
- location: "Gandhinagar, Gujarat, India",
- tagline: "Join the largest open source developer conference of the year. Learn, network, and contribute to the future of technology.",
- description:
- "Open Source Day 2026 is a community-driven event celebrating the power of open source software. Join developers, maintainers, and enthusiasts for a day of learning, collaboration, and innovation.",
- stats: {
- expectedAttendees: "600+",
- speakers: "20+",
- workshops: "8+",
- sponsors: "25+",
- communityPartners: "70+",
- },
-};
-
-export const HERO = {
- title: {
- part1: "PEN",
- part2: "SOURCE",
- part3: "DAY",
- year: "2026",
- },
- subtitle:
- "Join us for a day of learning, networking, and celebrating open source innovation. Connect with developers, contribute to projects, and shape the future of technology.",
- buttons: {
- primary: {
- text: "Join Community",
- url: "https://chat.whatsapp.com/EazGR2r9TChE7a1rLzBxV8?mode=gi_t",
- },
- secondary: {
- text: "Explore OSD 2025",
- url: "/2025",
- },
- },
-};
-
-export const NAVIGATION = {
- items: [
- { name: "Speakers", href: "/speakers" },
- { name: "Schedule", href: "/schedule" },
- { name: "Team", href: "/team" },
- { name: "Tickets", href: "/tickets" },
- { name: "Sponsors", href: "/sponsors" },
- { name: "Venue", href: "/venue" },
- { name: "Past Events", href: "/past-events" },
- ],
- cta: {
- text: "OSD 2025",
- url: "/2025",
- },
-};
-
-export const CALLS_2026 = [
- {
- title: "Call for Speakers",
- description: "Share your knowledge & inspire the community with a talk or workshop.",
- href: "/cfspk",
- emoji: "🎤",
- color: "from-violet-500 to-purple-600",
- badge: "Open",
- deadline: "25th March 2026",
- enable: true,
- },
- {
- title: "Call for Volunteers",
- description: "Help us make OSD 2026 an unforgettable experience for everyone.",
- href: "/cfv",
- emoji: "🙌",
- color: "from-emerald-500 to-green-600",
- badge: "CLOSED",
- deadline: "CLOSED",
- enable: false,
- },
- {
- title: "Call for Sponsors",
- description: "Support open source and grow your brand with the community.",
- href: "/cfs",
- emoji: "🤝",
- color: "from-amber-500 to-orange-600",
- badge: "Open",
- deadline: "31st March 2026",
- enable: true,
- },
- {
- title: "Call for Community Partners",
- description: "Partner with us to amplify the open source movement together.",
- href: "/cfc",
- emoji: "🌐",
- color: "from-sky-500 to-blue-600",
- badge: "Open",
- deadline: "31st March 2026",
- enable: true,
- },
- {
- title: "Call for Evangelists",
- description: "Spread the word about OSD 2026 and help grow our reach.",
- href: "/cfe",
- emoji: "📣",
- color: "from-pink-500 to-rose-600",
- badge: "Open",
- deadline: "21st March 2026",
- enable: true,
- },
- {
- title: "Call for Booth",
- description: "Showcase your project, product, or community with a booth at OSD 2026.",
- href: "/cfb",
- emoji: "🏢",
- color: "from-gray-500 to-gray-600",
- badge: "Open",
- deadline: "31st March 2026",
- enable: true,
- },
-];
-
-export const eventSchedule = [
- {
- time: "08:00 AM – 09:30 AM",
- title: "Registration & Welcome Kit",
- speaker: "",
- type: "registration",
- room: "Lobby",
- },
- {
- time: "09:30 AM – 10:00 AM",
- title: "Warm Up Activity & Icebreaker",
- speaker: "",
- type: "activity",
- room: "Main Auditorium",
- },
- {
- time: "10:00 AM – 10:15 AM",
- title: "Welcome Note",
- speaker: "",
- type: "opening",
- room: "Main Auditorium",
- },
- {
- time: "10:15 AM – 10:45 AM",
- title: "Opening Keynote — TBA",
- speaker: "Speaker TBA",
- type: "keynote",
- room: "Main Auditorium",
- },
- {
- time: "10:45 AM – 11:30 AM",
- title: "Technical Session — TBA",
- speaker: "Speaker TBA",
- type: "talk",
- room: "Main Auditorium",
- },
- {
- time: "11:30 AM – 12:45 PM",
- title: "Devroom Workshop — TBA",
- speaker: "Speaker TBA",
- type: "Devroom (Parallel)",
- room: "Secondary Hall",
- isPanelLeft: true,
- },
- {
- time: "11:30 AM – 12:00 PM",
- title: "Technical Talk — TBA",
- speaker: "Speaker TBA",
- type: "talk",
- room: "Main Auditorium",
- isPanelRight: true,
- },
- {
- time: "12:00 PM – 12:45 PM",
- title: "CXO Panel Discussion",
- speaker: "Panelists TBA",
- type: "CXO Panel Discussion",
- room: "Main Auditorium",
- isPanelRight: true,
- },
- {
- time: "12:45 PM – 01:45 PM",
- title: "Lunch & Networking",
- speaker: "",
- type: "break",
- room: "Food Court",
- },
- {
- time: "01:45 PM – 03:00 PM",
- title: "Hands-On Workshop — TBA",
- speaker: "Speaker TBA",
- type: "Devroom (Parallel)",
- room: "Secondary Hall",
- isPanelLeft: true,
- },
- {
- time: "01:45 PM – 02:30 PM",
- title: "Technical Talk — TBA",
- speaker: "Speaker TBA",
- type: "talk",
- room: "Main Auditorium",
- isPanelRight: true,
- },
- {
- time: "02:30 PM – 03:00 PM",
- title: "Technical Talk — TBA",
- speaker: "Speaker TBA",
- type: "talk",
- room: "Main Auditorium",
- isPanelRight: true,
- },
- {
- time: "03:00 PM – 03:45 PM",
- title: "Community Panel Discussion",
- speaker: "Panelists TBA",
- type: "Community Panel Discussion",
- room: "Main Auditorium",
- },
- {
- time: "03:45 PM – 04:15 PM",
- title: "Technical Talk — TBA",
- speaker: "Speaker TBA",
- type: "talk",
- room: "Main Auditorium",
- },
- {
- time: "04:15 PM – 04:45 PM",
- title: "Closing Keynote — TBA",
- speaker: "Speaker TBA",
- type: "Closing Keynote",
- room: "Main Auditorium",
- },
- {
- time: "04:45 PM – 05:00 PM",
- title: "Closing Remarks",
- speaker: "",
- type: "Closing",
- room: "Main Auditorium",
- },
- {
- time: "05:00 PM – 05:30 PM",
- title: "Goodies Distribution & Networking",
- speaker: "",
- type: "Social",
- room: "Exhibition Hall",
- },
-];
-
-export const workshopSchedule = [
- {
- time: "09:30 AM – 10:00 AM",
- title: "Event Introduction & Icebreaker",
- speaker: "",
- type: "activity",
- },
- {
- time: "10:00 AM – 11:30 AM",
- title: "Workshop 1 — TBA",
- speaker: "Speaker TBA",
- type: "workshop",
- },
- {
- time: "11:30 AM – 1:00 PM",
- title: "Workshop 2 — TBA",
- speaker: "Speaker TBA",
- type: "workshop",
- },
- {
- time: "01:00 PM – 02:00 PM",
- title: "Lunch & Networking",
- speaker: "",
- type: "break",
- },
- {
- time: "02:00 PM – 03:00 PM",
- title: "Workshop 3 — TBA",
- speaker: "Speaker TBA",
- type: "workshop",
- },
- {
- time: "03:00 PM – 04:00 PM",
- title: "Workshop 4 — TBA",
- speaker: "Speaker TBA",
- type: "workshop",
- },
- {
- time: "04:00 PM – 05:00 PM",
- title: "Project Development & Demo",
- speaker: "OSD Team",
- type: "panel",
- },
- {
- time: "05:00 PM – 05:15 PM",
- title: "Closing Remarks",
- speaker: "",
- type: "closing",
- },
-];
-
-export const OUR_SPEAKERS = [
- {
- name: "Speaker TBA",
- position: "Keynote Speaker",
- company: "To Be Announced",
- event: "Keynote",
- presentationTitle: "Opening Keynote — coming soon",
- },
- {
- name: "Speaker TBA",
- position: "Industry Leader",
- company: "To Be Announced",
- event: "Closing Keynote",
- presentationTitle: "Closing Keynote — coming soon",
- },
- {
- name: "Speaker TBA",
- position: "Open Source Expert",
- company: "To Be Announced",
- event: "Technical Talk",
- presentationTitle: "Technical Talk — coming soon",
- },
- {
- name: "Speaker TBA",
- position: "Cloud & DevOps Expert",
- company: "To Be Announced",
- event: "Technical Talk",
- presentationTitle: "Technical Talk — coming soon",
- },
- {
- name: "Speaker TBA",
- position: "AI & ML Engineer",
- company: "To Be Announced",
- event: "Workshop",
- presentationTitle: "Hands-On Workshop — coming soon",
- },
- {
- name: "Speaker TBA",
- position: "Community Leader",
- company: "To Be Announced",
- event: "Panel",
- presentationTitle: "Community Panel — coming soon",
- },
-];
-
-export const TICKETS = [
- {
- name: "Super Early Bird Ticket",
- price: "₹350",
- originalPrice: 350,
- description: "Super Early Bird pricing with full conference access. Limited availability!",
- features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies", "Super Early Bird Discount"],
- popular: true,
- available: true,
- alert: {
- text: "Most Awaited",
- classes: "text-white bg-green-500",
- },
- konfhubUrl: "/purchase",
- linkText: "Register Now",
- },
- {
- name: "Early Bird Ticket",
- price: "₹450",
- originalPrice: 450,
- description: "Early bird pricing with full conference access. Limited availability!",
- features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies", "Early Bird Discount"],
- popular: false,
- available: false,
- alert: {
- text: "Coming Soon",
- classes: "text-white bg-green-500",
- },
- konfhubUrl: "/purchase",
- linkText: "Coming Soon",
- },
- {
- name: "Regular Ticket",
- price: "₹700",
- originalPrice: 700,
- description: "Full conference access including lunch, keynotes, panels, and OSD goodies.",
- features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies"],
- popular: false,
- available: false,
- alert: {
- text: "Most Popular",
- classes: "text-white bg-green-600",
- },
- konfhubUrl: "/purchase",
- linkText: "Coming Soon",
- },
- {
- name: "Community Fan",
- price: "₹999",
- originalPrice: 999,
- description: "This ticket for all our community people who constantly support us and create a vibrant community.",
- features: [
- "Full-access to conference",
- "Breakfast & Lunch",
- "Keynotes, Panels, Workshops",
- "OSD Goodies",
- "Super Fan Goodies (Tshirts etc)",
- "Digital Certificate",
- ],
- popular: false,
- available: true,
- alert: {
- text: "Most Preferred",
- classes: "text-white bg-blue-500",
- },
- konfhubUrl: "/purchase",
- linkText: "Register Now",
- },
- {
- name: "Supporter Ticket",
- price: "₹1,999",
- originalPrice: 1999,
- description: "This ticket for all our community people who constantly support us and create a vibrant community.",
- features: [
- "Full-access to conference",
- "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day ",
- "Keynotes, Panels, Workshop",
- "OSD Goodies",
- "Supporter Exclusive goodies (Including Token of Apprecation,Tshirt etc.)",
- "Digital Certificate",
- "Priority Pass",
- ],
- popular: false,
- available: true,
- konfhubUrl: "/purchase",
- linkText: "Register Now",
- },
- {
- name: "Silver Ticket",
- price: "₹4,999",
- originalPrice: 4999,
- description: "This ticket for all our community people who constantly support us and create a vibrant community.",
- features: [
- "Full-access to conference",
- "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day ",
- "Keynotes, Panels, Workshop",
- "OSD Goodies",
- "Silver Ticket Exclusive goodies (Including Token of Apprecation,Tshirt etc.)",
- "Digital Certificate",
- "VIP Pass",
- "Shout out during the event",
- "Shout-out on Social Media",
- "Networking Dinner with Speakers , sponsors , organizers and some special industry invitees",
- ],
- popular: false,
- available: true,
- konfhubUrl: "/purchase",
- linkText: "Register Now",
- extra:
- "We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
- },
- {
- name: "Golden Ticket",
- price: "₹9,999",
- originalPrice: 9999,
- description: "This ticket for all our community people who constantly support us and create a vibrant community.",
- features: [
- "Full-access to conference",
- "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day ",
- "Keynotes, Panels, Workshop",
- "OSD Goodies",
- "Golden Ticket Exclusive goodies",
- "Digital Certificate",
- "Networking Dinner with Speakers, sponsors, organizers and some special industry invitees",
- "Shout-out on Social Media",
- "Shout out during the event",
- "Appreciation Memento from OSD",
- ],
- popular: false,
- available: true,
- konfhubUrl: "mailto:opensourceweekend@gmail.com",
- linkText: "Contact Organizers",
- extra:
- "We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
- },
- {
- name: "Micro Sponsor (Pack of 3 Golden Ticket)",
- price: "₹29,999",
- originalPrice: 29999,
- description:
- "This ticket for all our community people who constantly support us and create a vibrant community. (Ideal for Startup & MSME to get Visibility)",
- featureTitle: "Pack of 3 Tickets includes:",
- features: [
- "Full-access to conference",
- "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day",
- "Keynotes, Panels, Workshop",
- "OSD Goodies",
- "Golden Ticket Exclusive goodies",
- "Digital Certificate",
- "Networking Dinner with Speakers , sponsors , organizers and some special industry invitees",
- "Company Branding at relevant places",
- "Shout-out during the event",
- "Shout-out on Social Media",
- "Appreciation Memento from OSD",
- ],
- popular: false,
- available: true,
- konfhubUrl: "mailto:opensourceweekend@gmail.com",
- linkText: "Contact Organizers",
- extra:
- "We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
- },
-];
-
-export const VENUE = {
- name: "DAIICT - DAU (Dhirubhai Ambani University)",
- address: "Gandhinagar, Gujarat, India",
- date: "04 April 2026",
- description: "Full day event with multiple tracks at DAIICT - DAU, Gandhinagar.",
- capacity: "600+ attendees",
- format: "Full day event · Multiple tracks",
- googleMapsLink: "https://maps.app.goo.gl/G8zTiuN7oZp1x8qu9",
- facilities: [
- "Large auditorium with 500+ seats",
- "Multiple workshop rooms",
- "Networking lounge and exhibition area",
- "High-speed WiFi throughout",
- "Professional A/V equipment",
- "Accessible facilities",
- ],
-};
-
-// Reuse 2025 sponsor data as placeholders
-export const SPONSOR_TIERS = {
- gold: [
- { name: "OSCF", logo: "/icons/OSCF.png", website: "#" },
- { name: "OSW", logo: OSWBlack.src, website: "#" },
- { name: "CCSF", logo: "/icons/CCSF.png", website: "#" },
- ],
-};
-
-export const EVENT_PARTNER = [
- {
- id: 1,
- name: "Partner TBA",
- logo: "/icons/OSDGreen.svg",
- website: "#",
- },
-];
-
-export const VENUE_PARTNER = [
- {
- id: 1,
- name: "Venue Partner TBA",
- logo: "/icons/OSDGreen.svg",
- website: "#",
- },
-];
-
-export const COMMUNITY_PARTNERS = [
- {
- id: 1,
- name: "GDG Gandhinagar",
- logo: "/partners/gdg_gandhinagar.png",
- website: "#",
- },
- {
- id: 2,
- name: "GDG Cloud Gandhinagar",
- logo: "/partners/gdg_cloud_gandhinagar.png",
- website: "#",
- },
- {
- id: 3,
- name: "FFDG Vadodara",
- logo: "/partners/ffdg_vadodara.svg",
- website: "#",
- },
- {
- id: 4,
- name: "GDG Cloud Rajkot",
- logo: "/partners/gdg_cloud_rajkot.png",
- website: "#",
- },
- { id: 5, name: "GDG Surat", logo: "/partners/gdg_surat.png", website: "#" },
- {
- id: 6,
- name: "CNCG Gandhinagar",
- logo: "/partners/cncg_gandhinagar.png",
- website: "#",
- },
- {
- id: 7,
- name: "Hashicorp Ahmedabad",
- logo: "/partners/hashicorp_ahmedabad.jpg",
- website: "#",
- },
- {
- id: 8,
- name: "Grafana Ahmedabad",
- logo: "/partners/grafana_ahmedabad.png",
- website: "#",
- },
- {
- id: 9,
- name: "Ahmedabad Developer Club",
- logo: "/partners/ahmedabad_developer_club.jpg",
- website: "#",
- },
- {
- id: 10,
- name: "The Hackers Meetup",
- logo: "/partners/the_hackers_meetup.png",
- website: "#",
- },
- {
- id: 11,
- name: "Java User Group Gujarat",
- logo: "/partners/java_user_group_gujarat.svg",
- website: "#",
- },
- {
- id: 12,
- name: "GDG Cloud Ahmedabad",
- logo: "/partners/gdg_cloud_ahmedabad.png",
- website: "#",
- },
- {
- id: 13,
- name: "GDG Ahmedabad",
- logo: "/partners/gdg_ahmedabad.png",
- website: "#",
- },
- {
- id: 14,
- name: "FOSS United",
- logo: "/partners/FOSS_United.png",
- website: "#",
- },
- {
- id: 15,
- name: "Docker Ahmedabad",
- logo: "/partners/docker_ahmedabad.png",
- website: "#",
- },
- {
- id: 16,
- name: "Laravel Ahmedabad",
- logo: "/partners/laravel_ahmedabad.png",
- website: "#",
- },
- {
- id: 17,
- name: "MongoDB Ahmedabad",
- logo: "/partners/mongodb_ahmedabad.jpg",
- website: "#",
- },
- {
- id: 18,
- name: "Node Ahmedabad",
- logo: "/partners/node_ahmedabad.jpg",
- website: "#",
- },
- {
- id: 19,
- name: "AWS Ahmedabad",
- logo: "/partners/aws_ahmedabad.png",
- website: "#",
- },
- {
- id: 20,
- name: "CNCF Ahmedabad",
- logo: "/partners/cncf_ahmedabad.jpg",
- website: "#",
- },
-];
-
-// Past event images — reuse from 2025 assets
-
-import OSWApril_1 from "@/assets/PastEvents/OSW-april/20250405_114037.webp";
-import OSWApril_2 from "@/assets/PastEvents/OSW-april/20250405_123827.webp";
-import OSWApril_3 from "@/assets/PastEvents/OSW-april/20250405_140515.webp";
-import OSWApril_4 from "@/assets/PastEvents/OSW-april/20250405_142305.webp";
-
-import OSW24_1 from "@/assets/PastEvents/OSW-24/20241013_111739.webp";
-import OSW24_2 from "@/assets/PastEvents/OSW-24/20241013_094102.webp";
-import OSW24_3 from "@/assets/PastEvents/OSW-24/20241013_094249.webp";
-import OSW24_4 from "@/assets/PastEvents/OSW-24/20241013_102037.webp";
-import OSW24_5 from "@/assets/PastEvents/OSW-24/20241013_102246.webp";
-import OSW24_6 from "@/assets/PastEvents/OSW-24/20241013_102037.webp";
-import OSW24_7 from "@/assets/PastEvents/OSW-24/20241013_124553.webp";
-import OSW24_8 from "@/assets/PastEvents/OSW-24/PXL_20241013_082514049.webp";
-
-import OSWMAY_1 from "@/assets/PastEvents/OSW-may/Image_20250504_135007_012.webp";
-import OSWMAY_2 from "@/assets/PastEvents/OSW-may/Image_20250504_135032_445.webp";
-
-import OSWJune23_1 from "@/assets/PastEvents/OSW-june-23/IMG20230625102644.webp";
-import OSWJune23_3 from "@/assets/PastEvents/OSW-june-23/IMG20230625121639.webp";
-import OSWJune23_4 from "@/assets/PastEvents/OSW-june-23/IMG_8038.webp";
-
-import OSW23_1 from "@/assets/PastEvents/OSW-23/IMG_0759.webp";
-import OSW23_2 from "@/assets/PastEvents/OSW-23/IMG_0761.webp";
-import OSW23_3 from "@/assets/PastEvents/OSW-23/IMG_0767.webp";
-
-import OSD2025_1 from "@/assets/PastEvents/OSD-25/20251005_095801.jpg";
-import OSD2025_2 from "@/assets/PastEvents/OSD-25/20251005_160054.jpg";
-import OSD2025_3 from "@/assets/PastEvents/OSD-25/20251005_160718.jpg";
-import OSD2025_4 from "@/assets/PastEvents/OSD-25/20251005_094301.jpg";
-import OSD2025_5 from "@/assets/PastEvents/OSD-25/20251005_100037.jpg";
-import OSD2025_6 from "@/assets/PastEvents/OSD-25/20251005_100149.jpg";
-import OSD2025_7 from "@/assets/PastEvents/OSD-25/20251005_122529.jpg";
-import OSD2025_8 from "@/assets/PastEvents/OSD-25/20251005_160011.jpg";
-
-export const PastEvent = [
- {
- year: "2025",
- title: "Open Source Day 2025",
- images: [OSD2025_1, OSD2025_2, OSD2025_3, OSD2025_4],
- },
- {
- year: "2025",
- title: "OpenSourceWeekend: Product Collective (May 2025)",
- images: [OSD2025_5, OSD2025_6, OSD2025_7, OSD2025_8],
- },
- {
- year: "2025",
- title: "OpenSourceWeekend: Product Collective (April 2025)",
- images: [OSWApril_1, OSWApril_2, OSWApril_3, OSWApril_4],
- },
- {
- year: "2024",
- title: "2024 OpenSourceWeekend × Hacktoberfest",
- images: [OSW24_1, OSW24_2, OSW24_3, OSW24_4, OSW24_5, OSW24_6, OSW24_7, OSW24_8],
- },
- {
- year: "2023",
- title: "Open Source Talks (June 2023)",
- images: [OSWJune23_1, OSWJune23_4, OSWJune23_3, OSWMAY_1, OSWMAY_2, OSWMAY_1],
- },
- {
- year: "2023",
- title: "2023 OpenSourceWeekend × Hacktoberfest",
- images: [OSW23_1, OSW23_2, OSW23_3],
- },
-];
-
-export const FOOTER = {
- description:
- "OpenSourceDay is all about giving back to the open source projects, sharpening your skills, and celebrating all things open source. Join us for 2026!",
-};
-
-export const SOCIAL_LINKS = [
- {
- name: "Facebook",
- href: "https://www.facebook.com/OSWeekend",
- icon: FacebookIcon,
- description: "Facebook",
- },
- {
- name: "Twitter",
- href: "https://twitter.com/OSWeekend",
- icon: TwitterIcon,
- description: "Twitter icon",
- },
- {
- name: "Instagram",
- href: "https://instagram.com/OSWeekend",
- icon: InstagramIcon,
- description: "Instagram icon",
- },
- {
- name: "LinkedIn",
- href: "https://www.linkedin.com/company/open-source-weekend/",
- icon: LinkedInIcon,
- description: "LinkedIn icon",
- },
- {
- name: "Github",
- href: "https://github.com/oscfcommunity",
- icon: GithubIcon,
- description: "Github icon",
- },
- {
- name: "Medium",
- href: "https://medium.com/@opensourceweekend",
- icon: MediumIcon,
- description: "Medium icon",
- },
-];
-
-export const CONTACTS = [
- {
- name: "Email",
- content: "opensourceweekend@gmail.com",
- href: "mailto:opensourceweekend@gmail.com",
- icon: Mail,
- },
- {
- name: "Phone",
- content: "+91 89 8080 8222",
- href: "tel:+918980808222",
- icon: Phone,
- },
-];
+import FacebookIcon from "@/assets/icons/facebook.svg";
+import LinkedInIcon from "@/assets/icons/footer-linkedin.svg";
+import GithubIcon from "@/assets/icons/github.svg";
+import InstagramIcon from "@/assets/icons/instagram.svg";
+import Mail from "@/assets/icons/mail.svg";
+import MediumIcon from "@/assets/icons/medium.svg";
+import Phone from "@/assets/icons/phone.svg";
+import TwitterIcon from "@/assets/icons/x.svg";
+import OSDGreen from "@/assets/icons/OSDGreen.svg";
+import OSWBlack from "@/assets/icons/OSWBlack.svg";
+
+export const SITE = {
+ title: "2026 OpenSourceDay",
+ shortTitle: "OSD2026",
+ description: "OpenSourceDay 2026 - Join us for the next chapter of open source innovation, learning, and community building.",
+ website: "https://osd.opensourceweekend.org",
+ ogImage: "https://osd.opensourceweekend.org/images/Viral_Parmar_Stage.jpg",
+ icon: OSDGreen,
+ city: "Gandhinagar",
+};
+
+export const BRANDING = {
+ logos: {
+ main: OSDGreen,
+ },
+};
+
+export const EVENT = {
+ name: "Open Source Day 2026",
+ shortName: "OSD2026",
+ date: "TBA",
+ location: "Gandhinagar, Gujarat, India",
+ tagline: "Join the largest open source developer conference of the year. Learn, network, and contribute to the future of technology.",
+ description:
+ "Open Source Day 2026 is a community-driven event celebrating the power of open source software. Join developers, maintainers, and enthusiasts for a day of learning, collaboration, and innovation.",
+ stats: {
+ expectedAttendees: "600+",
+ speakers: "20+",
+ workshops: "8+",
+ sponsors: "25+",
+ communityPartners: "70+",
+ },
+};
+
+export const HERO = {
+ title: {
+ part1: "PEN",
+ part2: "SOURCE",
+ part3: "DAY",
+ year: "2026",
+ },
+ subtitle:
+ "Join us for a day of learning, networking, and celebrating open source innovation. Connect with developers, contribute to projects, and shape the future of technology.",
+ buttons: {
+ primary: {
+ text: "Join Community",
+ url: "https://chat.whatsapp.com/EazGR2r9TChE7a1rLzBxV8?mode=gi_t",
+ },
+ secondary: {
+ text: "Explore OSD 2025",
+ url: "/2025",
+ },
+ },
+};
+
+export const NAVIGATION = {
+ items: [
+ { name: "Speakers", href: "/speakers" },
+ { name: "Schedule", href: "/schedule" },
+ { name: "Team", href: "/team" },
+ { name: "Tickets", href: "/tickets" },
+ { name: "Sponsors", href: "/sponsors" },
+ { name: "Venue", href: "/venue" },
+ { name: "Past Events", href: "/past-events" },
+ ],
+ cta: {
+ text: "OSD 2025",
+ url: "/2025",
+ },
+};
+
+export const CALLS_2026 = [
+ {
+ title: "Call for Speakers",
+ description: "Share your knowledge & inspire the community with a talk or workshop.",
+ href: "/cfspk",
+ emoji: "🎤",
+ color: "from-violet-500 to-purple-600",
+ badge: "Open",
+ deadline: "25th March 2026",
+ enable: true,
+ },
+ {
+ title: "Call for Volunteers",
+ description: "Help us make OSD 2026 an unforgettable experience for everyone.",
+ href: "/cfv",
+ emoji: "🙌",
+ color: "from-emerald-500 to-green-600",
+ badge: "CLOSED",
+ deadline: "CLOSED",
+ enable: false,
+ },
+ {
+ title: "Call for Sponsors",
+ description: "Support open source and grow your brand with the community.",
+ href: "/cfs",
+ emoji: "🤝",
+ color: "from-amber-500 to-orange-600",
+ badge: "Open",
+ deadline: "31st March 2026",
+ enable: true,
+ },
+ {
+ title: "Call for Community Partners",
+ description: "Partner with us to amplify the open source movement together.",
+ href: "/cfc",
+ emoji: "🌐",
+ color: "from-sky-500 to-blue-600",
+ badge: "Open",
+ deadline: "31st March 2026",
+ enable: true,
+ },
+ {
+ title: "Call for Evangelists",
+ description: "Spread the word about OSD 2026 and help grow our reach.",
+ href: "/cfe",
+ emoji: "📣",
+ color: "from-pink-500 to-rose-600",
+ badge: "Open",
+ deadline: "21st March 2026",
+ enable: true,
+ },
+ {
+ title: "Call for Booth",
+ description: "Showcase your project, product, or community with a booth at OSD 2026.",
+ href: "/cfb",
+ emoji: "🏢",
+ color: "from-gray-500 to-gray-600",
+ badge: "Open",
+ deadline: "31st March 2026",
+ enable: true,
+ },
+];
+
+export const eventSchedule = [
+ {
+ time: "08:00 AM – 09:30 AM",
+ title: "Registration & Welcome Kit",
+ speaker: "",
+ type: "registration",
+ room: "Lobby",
+ },
+ {
+ time: "09:30 AM – 10:00 AM",
+ title: "Warm Up Activity & Icebreaker",
+ speaker: "",
+ type: "activity",
+ room: "Main Auditorium",
+ },
+ {
+ time: "10:00 AM – 10:15 AM",
+ title: "Welcome Note",
+ speaker: "",
+ type: "opening",
+ room: "Main Auditorium",
+ },
+ {
+ time: "10:15 AM – 10:45 AM",
+ title: "Opening Keynote — TBA",
+ speaker: "Speaker TBA",
+ type: "keynote",
+ room: "Main Auditorium",
+ },
+ {
+ time: "10:45 AM – 11:30 AM",
+ title: "Technical Session — TBA",
+ speaker: "Speaker TBA",
+ type: "talk",
+ room: "Main Auditorium",
+ },
+ {
+ time: "11:30 AM – 12:45 PM",
+ title: "Devroom Workshop — TBA",
+ speaker: "Speaker TBA",
+ type: "Devroom (Parallel)",
+ room: "Secondary Hall",
+ isPanelLeft: true,
+ },
+ {
+ time: "11:30 AM – 12:00 PM",
+ title: "Technical Talk — TBA",
+ speaker: "Speaker TBA",
+ type: "talk",
+ room: "Main Auditorium",
+ isPanelRight: true,
+ },
+ {
+ time: "12:00 PM – 12:45 PM",
+ title: "CXO Panel Discussion",
+ speaker: "Panelists TBA",
+ type: "CXO Panel Discussion",
+ room: "Main Auditorium",
+ isPanelRight: true,
+ },
+ {
+ time: "12:45 PM – 01:45 PM",
+ title: "Lunch & Networking",
+ speaker: "",
+ type: "break",
+ room: "Food Court",
+ },
+ {
+ time: "01:45 PM – 03:00 PM",
+ title: "Hands-On Workshop — TBA",
+ speaker: "Speaker TBA",
+ type: "Devroom (Parallel)",
+ room: "Secondary Hall",
+ isPanelLeft: true,
+ },
+ {
+ time: "01:45 PM – 02:30 PM",
+ title: "Technical Talk — TBA",
+ speaker: "Speaker TBA",
+ type: "talk",
+ room: "Main Auditorium",
+ isPanelRight: true,
+ },
+ {
+ time: "02:30 PM – 03:00 PM",
+ title: "Technical Talk — TBA",
+ speaker: "Speaker TBA",
+ type: "talk",
+ room: "Main Auditorium",
+ isPanelRight: true,
+ },
+ {
+ time: "03:00 PM – 03:45 PM",
+ title: "Community Panel Discussion",
+ speaker: "Panelists TBA",
+ type: "Community Panel Discussion",
+ room: "Main Auditorium",
+ },
+ {
+ time: "03:45 PM – 04:15 PM",
+ title: "Technical Talk — TBA",
+ speaker: "Speaker TBA",
+ type: "talk",
+ room: "Main Auditorium",
+ },
+ {
+ time: "04:15 PM – 04:45 PM",
+ title: "Closing Keynote — TBA",
+ speaker: "Speaker TBA",
+ type: "Closing Keynote",
+ room: "Main Auditorium",
+ },
+ {
+ time: "04:45 PM – 05:00 PM",
+ title: "Closing Remarks",
+ speaker: "",
+ type: "Closing",
+ room: "Main Auditorium",
+ },
+ {
+ time: "05:00 PM – 05:30 PM",
+ title: "Goodies Distribution & Networking",
+ speaker: "",
+ type: "Social",
+ room: "Exhibition Hall",
+ },
+];
+
+export const workshopSchedule = [
+ {
+ time: "09:30 AM – 10:00 AM",
+ title: "Event Introduction & Icebreaker",
+ speaker: "",
+ type: "activity",
+ },
+ {
+ time: "10:00 AM – 11:30 AM",
+ title: "Workshop 1 — TBA",
+ speaker: "Speaker TBA",
+ type: "workshop",
+ },
+ {
+ time: "11:30 AM – 1:00 PM",
+ title: "Workshop 2 — TBA",
+ speaker: "Speaker TBA",
+ type: "workshop",
+ },
+ {
+ time: "01:00 PM – 02:00 PM",
+ title: "Lunch & Networking",
+ speaker: "",
+ type: "break",
+ },
+ {
+ time: "02:00 PM – 03:00 PM",
+ title: "Workshop 3 — TBA",
+ speaker: "Speaker TBA",
+ type: "workshop",
+ },
+ {
+ time: "03:00 PM – 04:00 PM",
+ title: "Workshop 4 — TBA",
+ speaker: "Speaker TBA",
+ type: "workshop",
+ },
+ {
+ time: "04:00 PM – 05:00 PM",
+ title: "Project Development & Demo",
+ speaker: "OSD Team",
+ type: "panel",
+ },
+ {
+ time: "05:00 PM – 05:15 PM",
+ title: "Closing Remarks",
+ speaker: "",
+ type: "closing",
+ },
+];
+
+export const OUR_SPEAKERS = [
+ {
+ name: "Speaker TBA",
+ position: "Keynote Speaker",
+ company: "To Be Announced",
+ event: "Keynote",
+ presentationTitle: "Opening Keynote — coming soon",
+ },
+ {
+ name: "Speaker TBA",
+ position: "Industry Leader",
+ company: "To Be Announced",
+ event: "Closing Keynote",
+ presentationTitle: "Closing Keynote — coming soon",
+ },
+ {
+ name: "Speaker TBA",
+ position: "Open Source Expert",
+ company: "To Be Announced",
+ event: "Technical Talk",
+ presentationTitle: "Technical Talk — coming soon",
+ },
+ {
+ name: "Speaker TBA",
+ position: "Cloud & DevOps Expert",
+ company: "To Be Announced",
+ event: "Technical Talk",
+ presentationTitle: "Technical Talk — coming soon",
+ },
+ {
+ name: "Speaker TBA",
+ position: "AI & ML Engineer",
+ company: "To Be Announced",
+ event: "Workshop",
+ presentationTitle: "Hands-On Workshop — coming soon",
+ },
+ {
+ name: "Speaker TBA",
+ position: "Community Leader",
+ company: "To Be Announced",
+ event: "Panel",
+ presentationTitle: "Community Panel — coming soon",
+ },
+];
+
+export const TICKETS = [
+ {
+ name: "Super Early Bird Ticket",
+ price: "₹350",
+ originalPrice: 350,
+ description: "Super Early Bird pricing with full conference access. Limited availability!",
+ features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies", "Super Early Bird Discount"],
+ popular: true,
+ available: true,
+ alert: {
+ text: "Most Awaited",
+ classes: "text-white bg-green-500",
+ },
+ konfhubUrl: "/purchase",
+ linkText: "Register Now",
+ },
+ {
+ name: "Early Bird Ticket",
+ price: "₹450",
+ originalPrice: 450,
+ description: "Early bird pricing with full conference access. Limited availability!",
+ features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies", "Early Bird Discount"],
+ popular: false,
+ available: false,
+ alert: {
+ text: "Coming Soon",
+ classes: "text-white bg-green-500",
+ },
+ konfhubUrl: "/purchase",
+ linkText: "Coming Soon",
+ },
+ {
+ name: "Regular Ticket",
+ price: "₹700",
+ originalPrice: 700,
+ description: "Full conference access including lunch, keynotes, panels, and OSD goodies.",
+ features: ["Full-access to conference", "Breakfast & Lunch", "Keynotes, Panels, Workshop", "OSD Goodies"],
+ popular: false,
+ available: false,
+ alert: {
+ text: "Most Popular",
+ classes: "text-white bg-green-600",
+ },
+ konfhubUrl: "/purchase",
+ linkText: "Coming Soon",
+ },
+ {
+ name: "Community Fan",
+ price: "₹999",
+ originalPrice: 999,
+ description: "This ticket for all our community people who constantly support us and create a vibrant community.",
+ features: [
+ "Full-access to conference",
+ "Breakfast & Lunch",
+ "Keynotes, Panels, Workshops",
+ "OSD Goodies",
+ "Super Fan Goodies (Tshirts etc)",
+ "Digital Certificate",
+ ],
+ popular: false,
+ available: true,
+ alert: {
+ text: "Most Preferred",
+ classes: "text-white bg-blue-500",
+ },
+ konfhubUrl: "/purchase",
+ linkText: "Register Now",
+ },
+ {
+ name: "Supporter Ticket",
+ price: "₹1,999",
+ originalPrice: 1999,
+ description: "This ticket for all our community people who constantly support us and create a vibrant community.",
+ features: [
+ "Full-access to conference",
+ "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day ",
+ "Keynotes, Panels, Workshop",
+ "OSD Goodies",
+ "Supporter Exclusive goodies (Including Token of Apprecation,Tshirt etc.)",
+ "Digital Certificate",
+ "Priority Pass",
+ ],
+ popular: false,
+ available: true,
+ konfhubUrl: "/purchase",
+ linkText: "Register Now",
+ },
+ {
+ name: "Silver Ticket",
+ price: "₹4,999",
+ originalPrice: 4999,
+ description: "This ticket for all our community people who constantly support us and create a vibrant community.",
+ features: [
+ "Full-access to conference",
+ "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day ",
+ "Keynotes, Panels, Workshop",
+ "OSD Goodies",
+ "Silver Ticket Exclusive goodies (Including Token of Apprecation,Tshirt etc.)",
+ "Digital Certificate",
+ "VIP Pass",
+ "Shout out during the event",
+ "Shout-out on Social Media",
+ "Networking Dinner with Speakers , sponsors , organizers and some special industry invitees",
+ ],
+ popular: false,
+ available: true,
+ konfhubUrl: "/purchase",
+ linkText: "Register Now",
+ extra:
+ "We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
+ },
+ {
+ name: "Golden Ticket",
+ price: "₹9,999",
+ originalPrice: 9999,
+ description: "This ticket for all our community people who constantly support us and create a vibrant community.",
+ features: [
+ "Full-access to conference",
+ "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day ",
+ "Keynotes, Panels, Workshop",
+ "OSD Goodies",
+ "Golden Ticket Exclusive goodies",
+ "Digital Certificate",
+ "Networking Dinner with Speakers, sponsors, organizers and some special industry invitees",
+ "Shout-out on Social Media",
+ "Shout out during the event",
+ "Appreciation Memento from OSD",
+ ],
+ popular: false,
+ available: true,
+ konfhubUrl: "mailto:opensourceweekend@gmail.com",
+ linkText: "Contact Organizers",
+ extra:
+ "We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
+ },
+ {
+ name: "Micro Sponsor (Pack of 3 Golden Ticket)",
+ price: "₹29,999",
+ originalPrice: 29999,
+ description:
+ "This ticket for all our community people who constantly support us and create a vibrant community. (Ideal for Startup & MSME to get Visibility)",
+ featureTitle: "Pack of 3 Tickets includes:",
+ features: [
+ "Full-access to conference",
+ "Breakfast, Lunch & High-Tea with Speakers and Organizers on the event day",
+ "Keynotes, Panels, Workshop",
+ "OSD Goodies",
+ "Golden Ticket Exclusive goodies",
+ "Digital Certificate",
+ "Networking Dinner with Speakers , sponsors , organizers and some special industry invitees",
+ "Company Branding at relevant places",
+ "Shout-out during the event",
+ "Shout-out on Social Media",
+ "Appreciation Memento from OSD",
+ ],
+ popular: false,
+ available: true,
+ konfhubUrl: "mailto:opensourceweekend@gmail.com",
+ linkText: "Contact Organizers",
+ extra:
+ "We are a registered Non-Profit, Section-8 Organization. This Ticket would be considered as a Donation which could be claimed in 80G & 12AA Tax Exemption. For more details Contact Event Organizers.",
+ },
+];
+
+export const VENUE = {
+ name: "DAIICT - DAU (Dhirubhai Ambani University)",
+ address: "Gandhinagar, Gujarat, India",
+ date: "04 April 2026",
+ description: "Full day event with multiple tracks at DAIICT - DAU, Gandhinagar.",
+ capacity: "600+ attendees",
+ format: "Full day event · Multiple tracks",
+ googleMapsLink: "https://maps.app.goo.gl/G8zTiuN7oZp1x8qu9",
+ facilities: [
+ "Large auditorium with 500+ seats",
+ "Multiple workshop rooms",
+ "Networking lounge and exhibition area",
+ "High-speed WiFi throughout",
+ "Professional A/V equipment",
+ "Accessible facilities",
+ ],
+};
+
+// Reuse 2025 sponsor data as placeholders
+export const SPONSOR_TIERS = {
+ gold: [
+ { name: "OSCF", logo: "/icons/OSCF.png", website: "#" },
+ { name: "OSW", logo: OSWBlack.src, website: "#" },
+ { name: "CCSF", logo: "/icons/CCSF.png", website: "#" },
+ ],
+};
+
+export const EVENT_PARTNER = [
+ {
+ id: 1,
+ name: "Partner TBA",
+ logo: "/icons/OSDGreen.svg",
+ website: "#",
+ },
+];
+
+export const VENUE_PARTNER = [
+ {
+ id: 1,
+ name: "Venue Partner TBA",
+ logo: "/icons/OSDGreen.svg",
+ website: "#",
+ },
+];
+
+export const COMMUNITY_PARTNERS = [
+ {
+ id: 1,
+ name: "GDG Gandhinagar",
+ logo: "/partners/gdg_gandhinagar.png",
+ website: "#",
+ },
+ {
+ id: 2,
+ name: "GDG Cloud Gandhinagar",
+ logo: "/partners/gdg_cloud_gandhinagar.png",
+ website: "#",
+ },
+ {
+ id: 3,
+ name: "FFDG Vadodara",
+ logo: "/partners/ffdg_vadodara.svg",
+ website: "#",
+ },
+ {
+ id: 4,
+ name: "GDG Cloud Rajkot",
+ logo: "/partners/gdg_cloud_rajkot.png",
+ website: "#",
+ },
+ { id: 5, name: "GDG Surat", logo: "/partners/gdg_surat.png", website: "#" },
+ {
+ id: 6,
+ name: "CNCG Gandhinagar",
+ logo: "/partners/cncg_gandhinagar.png",
+ website: "#",
+ },
+ {
+ id: 7,
+ name: "Hashicorp Ahmedabad",
+ logo: "/partners/hashicorp_ahmedabad.jpg",
+ website: "#",
+ },
+ {
+ id: 8,
+ name: "Grafana Ahmedabad",
+ logo: "/partners/grafana_ahmedabad.png",
+ website: "#",
+ },
+ {
+ id: 9,
+ name: "Ahmedabad Developer Club",
+ logo: "/partners/ahmedabad_developer_club.jpg",
+ website: "#",
+ },
+ {
+ id: 10,
+ name: "The Hackers Meetup",
+ logo: "/partners/the_hackers_meetup.png",
+ website: "#",
+ },
+ {
+ id: 11,
+ name: "Java User Group Gujarat",
+ logo: "/partners/java_user_group_gujarat.svg",
+ website: "#",
+ },
+ {
+ id: 12,
+ name: "GDG Cloud Ahmedabad",
+ logo: "/partners/gdg_cloud_ahmedabad.png",
+ website: "#",
+ },
+ {
+ id: 13,
+ name: "GDG Ahmedabad",
+ logo: "/partners/gdg_ahmedabad.png",
+ website: "#",
+ },
+ {
+ id: 14,
+ name: "FOSS United",
+ logo: "/partners/FOSS_United.png",
+ website: "#",
+ },
+ {
+ id: 15,
+ name: "Docker Ahmedabad",
+ logo: "/partners/docker_ahmedabad.png",
+ website: "#",
+ },
+ {
+ id: 16,
+ name: "Laravel Ahmedabad",
+ logo: "/partners/laravel_ahmedabad.png",
+ website: "#",
+ },
+ {
+ id: 17,
+ name: "MongoDB Ahmedabad",
+ logo: "/partners/mongodb_ahmedabad.jpg",
+ website: "#",
+ },
+ {
+ id: 18,
+ name: "Node Ahmedabad",
+ logo: "/partners/node_ahmedabad.jpg",
+ website: "#",
+ },
+ {
+ id: 19,
+ name: "AWS Ahmedabad",
+ logo: "/partners/aws_ahmedabad.png",
+ website: "#",
+ },
+ {
+ id: 20,
+ name: "CNCF Ahmedabad",
+ logo: "/partners/cncf_ahmedabad.jpg",
+ website: "#",
+ },
+];
+
+// Past event images — reuse from 2025 assets
+
+import OSWApril_1 from "@/assets/PastEvents/OSW-april/20250405_114037.webp";
+import OSWApril_2 from "@/assets/PastEvents/OSW-april/20250405_123827.webp";
+import OSWApril_3 from "@/assets/PastEvents/OSW-april/20250405_140515.webp";
+import OSWApril_4 from "@/assets/PastEvents/OSW-april/20250405_142305.webp";
+
+import OSW24_1 from "@/assets/PastEvents/OSW-24/20241013_111739.webp";
+import OSW24_2 from "@/assets/PastEvents/OSW-24/20241013_094102.webp";
+import OSW24_3 from "@/assets/PastEvents/OSW-24/20241013_094249.webp";
+import OSW24_4 from "@/assets/PastEvents/OSW-24/20241013_102037.webp";
+import OSW24_5 from "@/assets/PastEvents/OSW-24/20241013_102246.webp";
+import OSW24_6 from "@/assets/PastEvents/OSW-24/20241013_102037.webp";
+import OSW24_7 from "@/assets/PastEvents/OSW-24/20241013_124553.webp";
+import OSW24_8 from "@/assets/PastEvents/OSW-24/PXL_20241013_082514049.webp";
+
+import OSWMAY_1 from "@/assets/PastEvents/OSW-may/Image_20250504_135007_012.webp";
+import OSWMAY_2 from "@/assets/PastEvents/OSW-may/Image_20250504_135032_445.webp";
+
+import OSWJune23_1 from "@/assets/PastEvents/OSW-june-23/IMG20230625102644.webp";
+import OSWJune23_3 from "@/assets/PastEvents/OSW-june-23/IMG20230625121639.webp";
+import OSWJune23_4 from "@/assets/PastEvents/OSW-june-23/IMG_8038.webp";
+
+import OSW23_1 from "@/assets/PastEvents/OSW-23/IMG_0759.webp";
+import OSW23_2 from "@/assets/PastEvents/OSW-23/IMG_0761.webp";
+import OSW23_3 from "@/assets/PastEvents/OSW-23/IMG_0767.webp";
+
+import OSD2025_1 from "@/assets/PastEvents/OSD-25/20251005_095801.jpg";
+import OSD2025_2 from "@/assets/PastEvents/OSD-25/20251005_160054.jpg";
+import OSD2025_3 from "@/assets/PastEvents/OSD-25/20251005_160718.jpg";
+import OSD2025_4 from "@/assets/PastEvents/OSD-25/20251005_094301.jpg";
+import OSD2025_5 from "@/assets/PastEvents/OSD-25/20251005_100037.jpg";
+import OSD2025_6 from "@/assets/PastEvents/OSD-25/20251005_100149.jpg";
+import OSD2025_7 from "@/assets/PastEvents/OSD-25/20251005_122529.jpg";
+import OSD2025_8 from "@/assets/PastEvents/OSD-25/20251005_160011.jpg";
+
+export const PastEvent = [
+ {
+ year: "2025",
+ title: "Open Source Day 2025",
+ images: [OSD2025_1, OSD2025_2, OSD2025_3, OSD2025_4],
+ },
+ {
+ year: "2025",
+ title: "OpenSourceWeekend: Product Collective (May 2025)",
+ images: [OSD2025_5, OSD2025_6, OSD2025_7, OSD2025_8],
+ },
+ {
+ year: "2025",
+ title: "OpenSourceWeekend: Product Collective (April 2025)",
+ images: [OSWApril_1, OSWApril_2, OSWApril_3, OSWApril_4],
+ },
+ {
+ year: "2024",
+ title: "2024 OpenSourceWeekend × Hacktoberfest",
+ images: [OSW24_1, OSW24_2, OSW24_3, OSW24_4, OSW24_5, OSW24_6, OSW24_7, OSW24_8],
+ },
+ {
+ year: "2023",
+ title: "Open Source Talks (June 2023)",
+ images: [OSWJune23_1, OSWJune23_4, OSWJune23_3, OSWMAY_1, OSWMAY_2, OSWMAY_1],
+ },
+ {
+ year: "2023",
+ title: "2023 OpenSourceWeekend × Hacktoberfest",
+ images: [OSW23_1, OSW23_2, OSW23_3],
+ },
+];
+
+export const FOOTER = {
+ description:
+ "OpenSourceDay is all about giving back to the open source projects, sharpening your skills, and celebrating all things open source. Join us for 2026!",
+};
+
+export const SOCIAL_LINKS = [
+ {
+ name: "Facebook",
+ href: "https://www.facebook.com/OSWeekend",
+ icon: FacebookIcon,
+ description: "Facebook",
+ },
+ {
+ name: "Twitter",
+ href: "https://twitter.com/OSWeekend",
+ icon: TwitterIcon,
+ description: "Twitter icon",
+ },
+ {
+ name: "Instagram",
+ href: "https://instagram.com/OSWeekend",
+ icon: InstagramIcon,
+ description: "Instagram icon",
+ },
+ {
+ name: "LinkedIn",
+ href: "https://www.linkedin.com/company/open-source-weekend/",
+ icon: LinkedInIcon,
+ description: "LinkedIn icon",
+ },
+ {
+ name: "Github",
+ href: "https://github.com/oscfcommunity",
+ icon: GithubIcon,
+ description: "Github icon",
+ },
+ {
+ name: "Medium",
+ href: "https://medium.com/@opensourceweekend",
+ icon: MediumIcon,
+ description: "Medium icon",
+ },
+];
+
+export const CONTACTS = [
+ {
+ name: "Email",
+ content: "opensourceweekend@gmail.com",
+ href: "mailto:opensourceweekend@gmail.com",
+ icon: Mail,
+ },
+ {
+ name: "Phone",
+ content: "+91 89 8080 8222",
+ href: "tel:+918980808222",
+ icon: Phone,
+ },
+];
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index c4b3a90..e172d22 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -1,76 +1,76 @@
----
-import { ClientRouter } from "astro:transitions";
-
-import Navigation from "@/components/Navigation";
-import Footer from "@/components/Footer.astro";
-
-import { SITE } from "@/config/config";
-
-export interface Props {
- title?: string;
- description?: string;
- ogImage?: string;
- canonicalUrl?: URL;
- activePath: string;
-}
-
-const { title = SITE.title, description = SITE.description, ogImage = SITE.ogImage, canonicalUrl = Astro.url, activePath = "" } = Astro.props;
-
-// this commit is for building the site locally
----
-
-
-
-
-
-
-
-
- {title}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+---
+import { ClientRouter } from "astro:transitions";
+
+import Navigation from "@/components/Navigation";
+import Footer from "@/components/Footer.astro";
+
+import { SITE } from "@/config/config";
+
+export interface Props {
+ title?: string;
+ description?: string;
+ ogImage?: string;
+ canonicalUrl?: URL;
+ activePath: string;
+}
+
+const { title = SITE.title, description = SITE.description, ogImage = SITE.ogImage, canonicalUrl = Astro.url, activePath = "" } = Astro.props;
+
+// this commit is for building the site locally
+---
+
+
+
+
+
+
+
+
+ {title}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/2025/schedule.astro b/src/pages/2025/schedule.astro
index 5a0f9d8..c8e38b0 100644
--- a/src/pages/2025/schedule.astro
+++ b/src/pages/2025/schedule.astro
@@ -1,237 +1,237 @@
----
-import Layout from "@/layouts/2025/Layout.astro";
-import "@/styles/2025/global.css";
-import AddToGoogleCalendar from "@components/2025/AddToGoogleCalendar";
-import Heading from "@components/2025/Heading.astro";
-
-import { eventSchedule, fullEvent, workshopSchedule } from "@/config/2025/config";
-
-const getTypeColor = (type: string) => {
- const colorMap: Record = {
- registration: "bg-gray-100",
- "community panel": "bg-green-300", // Note: this seems like a typo
- opening: "bg-gray-100",
- keynote: "bg-yellow-200",
- "closing keynote": "bg-yellow-200",
- talk: "bg-blue-200",
- "cxo panel": "bg-lime-300",
- break: "bg-gray-100",
- closing: "bg-gray-100",
- social: "bg-gray-100",
- activity: "bg-gray-100",
- };
-
- return colorMap[type.toLowerCase()] || "bg-pink-300";
-};
----
-
-
-
-
-
-
-
-
-
-
-
- Open Source Day 2025
- Silver Oak University (5th October 2025)
-
-
-
-
-
- {
- eventSchedule.map((session) => (
-
-
-
-
-
- {session.title}
-
- {session.speaker && (
-
by {session.speaker}
- )}
-
-
-
-
-
-
-
- {session.room}
-
-
-
-
-
- ))
- }
-
-
-
-
-
-
-
-
-
Take It With You
-
- Download the complete schedule and add it to your calendar so you don't
- miss anything!
-
-
-
-
-
-
-
-
- Open Source with AI
- Workshop at Aubergine (27th September 2025)
-
-
- {
- workshopSchedule.map((session) => (
-
-
-
-
-
- {session.time}
-
-
- {session.type.charAt(0).toUpperCase() +
- session.type.slice(1)}
-
-
-
- {session.title}
-
- {session.speaker && (
-
by {session.speaker}
- )}
-
{session.room}
-
-
-
-
- ))
- }
-
-
-
-
+---
+import Layout from "@/layouts/2025/Layout.astro";
+import "@/styles/2025/global.css";
+import AddToGoogleCalendar from "@components/2025/AddToGoogleCalendar";
+import Heading from "@components/2025/Heading.astro";
+
+import { eventSchedule, fullEvent, workshopSchedule } from "@/config/2025/config";
+
+const getTypeColor = (type: string) => {
+ const colorMap: Record = {
+ registration: "bg-gray-100",
+ "community panel": "bg-green-300", // Note: this seems like a typo
+ opening: "bg-gray-100",
+ keynote: "bg-yellow-200",
+ "closing keynote": "bg-yellow-200",
+ talk: "bg-blue-200",
+ "cxo panel": "bg-lime-300",
+ break: "bg-gray-100",
+ closing: "bg-gray-100",
+ social: "bg-gray-100",
+ activity: "bg-gray-100",
+ };
+
+ return colorMap[type.toLowerCase()] || "bg-pink-300";
+};
+---
+
+
+
+
+
+
+
+
+
+
+
+ Open Source Day 2025
+ Silver Oak University (5th October 2025)
+
+
+
+
+
+ {
+ eventSchedule.map((session) => (
+
+
+
+
+
+ {session.title}
+
+ {session.speaker && (
+
by {session.speaker}
+ )}
+
+
+
+
+
+
+
+ {session.room}
+
+
+
+
+
+ ))
+ }
+
+
+
+
+
+
+
+
+
Take It With You
+
+ Download the complete schedule and add it to your calendar so you don't
+ miss anything!
+
+
+
+
+
+
+
+
+ Open Source with AI
+ Workshop at Aubergine (27th September 2025)
+
+
+ {
+ workshopSchedule.map((session) => (
+
+
+
+
+
+ {session.time}
+
+
+ {session.type.charAt(0).toUpperCase() +
+ session.type.slice(1)}
+
+
+
+ {session.title}
+
+ {session.speaker && (
+
by {session.speaker}
+ )}
+
{session.room}
+
+
+
+
+ ))
+ }
+
+
+
+
diff --git a/src/pages/index.astro b/src/pages/index.astro
index b57fb3e..52c5a47 100644
--- a/src/pages/index.astro
+++ b/src/pages/index.astro
@@ -1,524 +1,526 @@
----
-import { Image } from "astro:assets";
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
-import { CALLS_2026, VENUE, TICKETS, SITE } from "@/config/config.ts";
-import Hero from "@/components/Hero.jsx";
-import Counter from "@/components/Counter.jsx";
-import ScrollAnimations from "@/components/ScrollAnimations.jsx";
-import MarqueeLogos from "@/components/MarqueeLogos.jsx";
-import LearnAndContribute from "@/assets/icons/learn-contribute.svg";
-import Connect from "@/assets/icons/connect.svg";
-import Celebrate from "@/assets/icons/celebrate.svg";
-import LocationIcon from "@/assets/icons/location.svg";
-import CalendarClock from "@/assets/icons/calendarClock.svg";
-
-import { sponsorsData } from "@/lib/graphql/queries/sponsors.query.ts";
-import { speakersData } from "@/lib/graphql/queries/speakers.query.ts";
-import { env } from "@/lib/env.ts";
-import { ticketsData } from "@/lib/graphql/queries/tickets.query.ts";
-import Faq from "@components/Faq.astro";
-import Speaker from "@components/Speaker.astro";
-
-// ── helpers ──────────────────────────────────────────────────────────
-function strapiImg(url: string | null | undefined): string | null {
- if (!url) return null;
- const t = url.trim();
- return t.startsWith("http") ? t : `${env.STRAPI_BASE_URL}${t}`;
-}
-
-// ── sponsors ─────────────────────────────────────────────────────────
-const rawSponsorGroups = (sponsorsData as any)?.sponsors?.[0]?.sponsors ?? [];
-const sponsorGroups = rawSponsorGroups.map((g: any) => ({
- ...g,
- sponsors: g.sponsors.map((s: any) => ({
- ...s,
- logoUrl: strapiImg(s.logo?.url),
- // shape MarqueeLogos expects: { logo, name }
- logo: strapiImg(s.logo?.url),
- })),
-}));
-
-// Threshold: if a group has more than this many sponsors → marquee; else → grid
-const MARQUEE_THRESHOLD = 5;
-
-// ── speakers ─────────────────────────────────────────────────────────
-const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
- .flatMap((sec: any) => sec.speakers ?? [])
- .map((s: any) => ({
- ...s,
- imageUrl: strapiImg(s.image?.url),
- linkedinUrl: s.link?.trim() || null,
- }));
-
-// ── tickets ─────────────────────────────────────────────────────────
-const ticketsResponse = ticketsData?.tickets?.[0]?.tickets || [];
-
----
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Forms are LIVE
-
-
Get Involved in OSD 2026
-
- Whether you want to speak, volunteer, sponsor, or spread the word — there's a place for you at Open Source Day.
-
-
-
-
- {CALLS_2026.map((call) => (
-
-
-
-
- {call.emoji}
-
-
- {call.badge}
-
-
-
-
-
{call.title}
-
-
-
{call.description}
-
-
-
- Deadline: {call.deadline}
-
-
-
- {
- call.enable ?
- Apply Now
-
-
-
- :
- Apply Now
-
-
-
-
- }
-
- ))}
-
-
-
- Questions? Reach us at
- opensourceweekend@gmail.com
-
-
-
-
-
-
-
-
-
-
-
-
About Open Source Day
-
- Open Source Day 2026 is a community-driven conference celebrating the power of open source software. Join developers, maintainers, and builders for a full day of learning, collaboration, and innovation in {SITE.city}.
-
-
-
-
-
-
-
-
-
Learn & Contribute
-
Discover new technologies, learn best practices, and get hands-on experience contributing to real open source projects.
-
-
-
-
-
-
Connect
-
Network with fellow developers, open source maintainers, and tech enthusiasts from across the Indian tech community.
-
-
-
-
-
-
Celebrate
-
Celebrate open source achievements and discover exciting new projects, communities, and opportunities.
-
-
-
-
-
-
-
-
-
-
Building Impact in 2026
-
What we're aiming for — bigger and better than ever
-
-
-
-
- {[
- { value: 600, suffix: "+", label: "Expected Attendees" },
- { value: 100, suffix: "+", label: "Community Partners" },
- { value: 50, suffix: "+", label: "Expert Speakers" },
- { value: 20, suffix: "+", label: "Technical Sessions" },
- ].map(({ value, suffix, label }) => (
-
-
- {suffix}
-
-
{label}
-
- ))}
-
-
-
- {[
- { value: 10, suffix: "+", label: "Panel Discussions" },
- { value: 5, suffix: "+", label: "Workshops" },
- { value: 100, suffix: "+", label: "Open Source Project Contribution" },
- ].map(({ value, suffix, label }) => (
-
-
- {suffix}
-
-
{label}
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
- 🎤 Meet the Experts
-
-
Our Speakers
-
- Learn from industry leaders, open source maintainers, and tech innovators shaping the future of software
-
-
-
- {allSpeakers.length > 0 ? (
-
- {allSpeakers.slice(0, 8).map((speaker: any) => (
-
-
-
-
-
-
-
-
-
-
-
- {speaker.name}
-
-
- {speaker.position?.trim() ?? ""}{speaker.position && speaker.company ? " at " : ""}{speaker.company?.trim()}
-
-
- {speaker.event && (
-
-
- {speaker.event.trim()}
-
- )}
-
-
- ))}
-
- ) : (
-
-
Speaker announcements coming soon!
-
Stay tuned for our incredible lineup
-
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Our Speakers
-
Our 2026 speaker lineup is coming together. Apply to share your expertise!
-
-
- {allSpeakers.length > 0 ? (
-
-
- ) : (
-
Speaker announcements coming soon — apply to speak!
- )}
-
-
-
-
-
-
-
-
-
-
-
-
-
{VENUE.name}
-
{VENUE.address}
-
-
- 04 April 2026 · {SITE.city}, Gujarat
-
-
- Venue Details
-
-
-
-
-
-
-
-
- {ticketsResponse.slice(0, 3).map((t:any) => (
-
-
-
-
-
{t.name}
-
{t.description?.slice(0, 55)}…
-
- {t.available ?
-
{t.linkText}
-
-
-
- :
-
{t.linkText}
-
- }
-
-
-
- ))}
-
-
- View All Tickets
-
-
-
-
-
-
-
-
-
-
-
-
Ready to Join Us?
-
- Don't miss out on India's biggest open source community event. Join our WhatsApp community to stay updated!
-
-
-
-
-
+---
+import { Image } from "astro:assets";
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+import { CALLS_2026, VENUE, TICKETS, SITE } from "@/config/config.ts";
+import Hero from "@/components/Hero.jsx";
+import Counter from "@/components/Counter.jsx";
+import ScrollAnimations from "@/components/ScrollAnimations.jsx";
+import MarqueeLogos from "@/components/MarqueeLogos.jsx";
+import LearnAndContribute from "@/assets/icons/learn-contribute.svg";
+import Connect from "@/assets/icons/connect.svg";
+import Celebrate from "@/assets/icons/celebrate.svg";
+import LocationIcon from "@/assets/icons/location.svg";
+import CalendarClock from "@/assets/icons/calendarClock.svg";
+
+import { sponsorsData } from "@/lib/graphql/queries/sponsors.query.ts";
+import { speakersData } from "@/lib/graphql/queries/speakers.query.ts";
+import { env } from "@/lib/env.ts";
+import { ticketsData } from "@/lib/graphql/queries/tickets.query.ts";
+import Faq from "@components/Faq.astro";
+import Speaker from "@components/Speaker.astro";
+import MascotScroller from "@/components/MascotScroller.jsx";
+
+// ── helpers ──────────────────────────────────────────────────────────
+function strapiImg(url: string | null | undefined): string | null {
+ if (!url) return null;
+ const t = url.trim();
+ return t.startsWith("http") ? t : `${env.STRAPI_BASE_URL}${t}`;
+}
+
+// ── sponsors ─────────────────────────────────────────────────────────
+const rawSponsorGroups = (sponsorsData as any)?.sponsors?.[0]?.sponsors ?? [];
+const sponsorGroups = rawSponsorGroups.map((g: any) => ({
+ ...g,
+ sponsors: g.sponsors.map((s: any) => ({
+ ...s,
+ logoUrl: strapiImg(s.logo?.url),
+ // shape MarqueeLogos expects: { logo, name }
+ logo: strapiImg(s.logo?.url),
+ })),
+}));
+
+// Threshold: if a group has more than this many sponsors → marquee; else → grid
+const MARQUEE_THRESHOLD = 5;
+
+// ── speakers ─────────────────────────────────────────────────────────
+const allSpeakers = ((speakersData as any)?.speakers?.[0]?.ourSpeakers ?? [])
+ .flatMap((sec: any) => sec.speakers ?? [])
+ .map((s: any) => ({
+ ...s,
+ imageUrl: strapiImg(s.image?.url),
+ linkedinUrl: s.link?.trim() || null,
+ }));
+
+// ── tickets ─────────────────────────────────────────────────────────
+const ticketsResponse = ticketsData?.tickets?.[0]?.tickets || [];
+
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Forms are LIVE
+
+
Get Involved in OSD 2026
+
+ Whether you want to speak, volunteer, sponsor, or spread the word — there's a place for you at Open Source Day.
+
+
+
+
+ {CALLS_2026.map((call) => (
+
+
+
+
+ {call.emoji}
+
+
+ {call.badge}
+
+
+
+
+
{call.title}
+
+
+
{call.description}
+
+
+
+ Deadline: {call.deadline}
+
+
+
+ {
+ call.enable ?
+ Apply Now
+
+
+
+ :
+ Apply Now
+
+
+
+
+ }
+
+ ))}
+
+
+
+ Questions? Reach us at
+ opensourceweekend@gmail.com
+
+
+
+
+
+
+
+
+
+
+
+
About Open Source Day
+
+ Open Source Day 2026 is a community-driven conference celebrating the power of open source software. Join developers, maintainers, and builders for a full day of learning, collaboration, and innovation in {SITE.city}.
+
+
+
+
+
+
+
+
+
Learn & Contribute
+
Discover new technologies, learn best practices, and get hands-on experience contributing to real open source projects.
+
+
+
+
+
+
Connect
+
Network with fellow developers, open source maintainers, and tech enthusiasts from across the Indian tech community.
+
+
+
+
+
+
Celebrate
+
Celebrate open source achievements and discover exciting new projects, communities, and opportunities.
+
+
+
+
+
+
+
+
+
+
Building Impact in 2026
+
What we're aiming for — bigger and better than ever
+
+
+
+
+ {[
+ { value: 600, suffix: "+", label: "Expected Attendees" },
+ { value: 100, suffix: "+", label: "Community Partners" },
+ { value: 50, suffix: "+", label: "Expert Speakers" },
+ { value: 20, suffix: "+", label: "Technical Sessions" },
+ ].map(({ value, suffix, label }) => (
+
+
+ {suffix}
+
+
{label}
+
+ ))}
+
+
+
+ {[
+ { value: 10, suffix: "+", label: "Panel Discussions" },
+ { value: 5, suffix: "+", label: "Workshops" },
+ { value: 100, suffix: "+", label: "Open Source Project Contribution" },
+ ].map(({ value, suffix, label }) => (
+
+
+ {suffix}
+
+
{label}
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
+ 🎤 Meet the Experts
+
+
Our Speakers
+
+ Learn from industry leaders, open source maintainers, and tech innovators shaping the future of software
+
+
+
+ {allSpeakers.length > 0 ? (
+
+ {allSpeakers.slice(0, 8).map((speaker: any) => (
+
+
+
+
+
+
+
+
+
+
+
+ {speaker.name}
+
+
+ {speaker.position?.trim() ?? ""}{speaker.position && speaker.company ? " at " : ""}{speaker.company?.trim()}
+
+
+ {speaker.event && (
+
+
+ {speaker.event.trim()}
+
+ )}
+
+
+ ))}
+
+ ) : (
+
+
Speaker announcements coming soon!
+
Stay tuned for our incredible lineup
+
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Our Speakers
+
Our 2026 speaker lineup is coming together. Apply to share your expertise!
+
+
+ {allSpeakers.length > 0 ? (
+
+
+ ) : (
+
Speaker announcements coming soon — apply to speak!
+ )}
+
+
+
+
+
+
+
+
+
+
+
+
+
{VENUE.name}
+
{VENUE.address}
+
+
+ 04 April 2026 · {SITE.city}, Gujarat
+
+
+ Venue Details
+
+
+
+
+
+
+
+
+ {ticketsResponse.slice(0, 3).map((t:any) => (
+
+
+
+
+
{t.name}
+
{t.description?.slice(0, 55)}…
+
+ {t.available ?
+
{t.linkText}
+
+
+
+ :
+
{t.linkText}
+
+ }
+
+
+
+ ))}
+
+
+ View All Tickets
+
+
+
+
+
+
+
+
+
+
+
+
Ready to Join Us?
+
+ Don't miss out on India's biggest open source community event. Join our WhatsApp community to stay updated!
+
+
+
+
+
diff --git a/src/pages/past-events.astro b/src/pages/past-events.astro
index ffd8914..ecafbe9 100644
--- a/src/pages/past-events.astro
+++ b/src/pages/past-events.astro
@@ -1,249 +1,249 @@
----
-import { Image } from "astro:assets";
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
-import PageHero from "@/components/PageHero.jsx";
-import { PastEvent, SITE } from "@/config/config.ts";
-
-// OSD 2025 photos — use first event group (May 2025 or latest)
-const osd2025Photos = PastEvent[0]?.images?.slice(0, 4) ?? [];
----
-
-
-
-
-
-
-
-
-
-
-
-
OCT 2025
-
Open Source Day 2025
-
- OSD 2025 was held at Silver Oak University, Ahmedabad — our biggest edition yet. 600+ attendees, 20+ talks, sold-out workshops, and an incredible
- open source community.
-
-
- {
- [
- ["600+", "Attendees"],
- ["20+", "Sessions"],
- ["70+", "Partners"],
- ].map(([num, label]) => (
-
- ))
- }
-
-
- Visit OSD 2025 Site
-
-
-
-
-
-
- {
- osd2025Photos.length > 0
- ? osd2025Photos.map((img: any) => (
-
-
-
- ))
- : [1, 2, 3, 4].map((i) => (
-
- Photo {i}
-
- ))
- }
-
-
-
-
-
-
-
-
-
-
The Journey
-
Open Source Day has been growing every year — click each year to explore
-
-
-
-
-
-
-
2026
-
-
Open Source Day 2026
-
TBA · {SITE.city}, Gujarat
-
-
Upcoming
-
-
-
-
-
-
- 2025
-
-
Open Source Day 2025
-
Silver Oak University · 600+ attendees · 20+ sessions
-
-
-
-
-
- {
- PastEvent.filter((e) => e.year === "2025")
- .flatMap((e) => e.images)
- .slice(0, 8)
- .map((img: any) => (
-
-
-
- ))
- }
-
-
-
-
-
-
-
- 2024
-
-
Open Source Day 2024
-
Another milestone year for the open source community
-
-
-
-
-
- {
- PastEvent.filter((e) => e.year === "2024")
- .flatMap((e) => e.images)
- .slice(0, 8)
- .map((img: any) => (
-
-
-
- ))
- }
-
-
-
-
-
-
-
- 2023
-
-
Open Source Day 2023
-
Growing the community across Gujarat and beyond
-
-
-
-
-
- {
- PastEvent.filter((e) => e.year === "2023")
- .flatMap((e) => e.images)
- .slice(0, 8)
- .map((img: any) => (
-
-
-
- ))
- }
-
-
-
-
-
-
-
-
2022
-
-
Open Source Day 2022
-
Back in person after the pandemic, stronger than ever
-
-
-
-
-
-
-
-
-
- Be part of OSD 2026
- The next chapter is being written. Join the community to stay updated and get involved.
-
-
-
-
-
+---
+import { Image } from "astro:assets";
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+import PageHero from "@/components/PageHero.jsx";
+import { PastEvent, SITE } from "@/config/config.ts";
+
+// OSD 2025 photos — use first event group (May 2025 or latest)
+const osd2025Photos = PastEvent[0]?.images?.slice(0, 4) ?? [];
+---
+
+
+
+
+
+
+
+
+
+
+
+
OCT 2025
+
Open Source Day 2025
+
+ OSD 2025 was held at Silver Oak University, Ahmedabad — our biggest edition yet. 600+ attendees, 20+ talks, sold-out workshops, and an incredible
+ open source community.
+
+
+ {
+ [
+ ["600+", "Attendees"],
+ ["20+", "Sessions"],
+ ["70+", "Partners"],
+ ].map(([num, label]) => (
+
+ ))
+ }
+
+
+ Visit OSD 2025 Site
+
+
+
+
+
+
+ {
+ osd2025Photos.length > 0
+ ? osd2025Photos.map((img: any) => (
+
+
+
+ ))
+ : [1, 2, 3, 4].map((i) => (
+
+ Photo {i}
+
+ ))
+ }
+
+
+
+
+
+
+
+
+
+
The Journey
+
Open Source Day has been growing every year — click each year to explore
+
+
+
+
+
+
+
2026
+
+
Open Source Day 2026
+
TBA · {SITE.city}, Gujarat
+
+
Upcoming
+
+
+
+
+
+
+ 2025
+
+
Open Source Day 2025
+
Silver Oak University · 600+ attendees · 20+ sessions
+
+
+
+
+
+ {
+ PastEvent.filter((e) => e.year === "2025")
+ .flatMap((e) => e.images)
+ .slice(0, 8)
+ .map((img: any) => (
+
+
+
+ ))
+ }
+
+
+
+
+
+
+
+ 2024
+
+
Open Source Day 2024
+
Another milestone year for the open source community
+
+
+
+
+
+ {
+ PastEvent.filter((e) => e.year === "2024")
+ .flatMap((e) => e.images)
+ .slice(0, 8)
+ .map((img: any) => (
+
+
+
+ ))
+ }
+
+
+
+
+
+
+
+ 2023
+
+
Open Source Day 2023
+
Growing the community across Gujarat and beyond
+
+
+
+
+
+ {
+ PastEvent.filter((e) => e.year === "2023")
+ .flatMap((e) => e.images)
+ .slice(0, 8)
+ .map((img: any) => (
+
+
+
+ ))
+ }
+
+
+
+
+
+
+
+
2022
+
+
Open Source Day 2022
+
Back in person after the pandemic, stronger than ever
+
+
+
+
+
+
+
+
+
+ Be part of OSD 2026
+ The next chapter is being written. Join the community to stay updated and get involved.
+
+
+
+
+
diff --git a/src/pages/purchase.astro b/src/pages/purchase.astro
index fee4b5e..a8c6a0f 100644
--- a/src/pages/purchase.astro
+++ b/src/pages/purchase.astro
@@ -1,82 +1,82 @@
----
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
-
-import { ticketsData } from "@/lib/graphql/queries/tickets.query.ts";
-console.log(JSON.stringify(ticketsData, null, 2));
----
-
-
-
-
-
-
-
-
-
-
What's Included
-
Everything you get with your OSD 2026 ticket
-
-
- {
- [
- { label: "Full Conference Access", desc: "Access all keynotes, talks, panels, and networking sessions throughout the day." },
- { label: "Lunch & Refreshments", desc: "Enjoy complimentary lunch and refreshments throughout the event." },
- { label: "OSD Goodies", desc: "Take home exclusive OSD merchandise and community goodies." },
- ].map(({ label, desc }) => (
-
- ))
- }
-
-
-
-
-
-
-
-
-
Frequently Asked Questions
-
-
- {
- [
- { q: "When will tickets go on sale?", a: "Tickets are live now." },
- { q: "Can I get a refund?", a: "Tickets are Non refundable and non transferable" },
- { q: "Are student discounts available?", a: "No discount for students." },
- { q: "What's included in the ticket?", a: "All tickets include conference access, lunch, keynotes, panels, and OSD goodies." },
- ].map((faq) => (
-
- ))
- }
-
-
-
-
-
-
- Questions about tickets?
- opensourceweekend@gmail.com
-
-
+---
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+
+import { ticketsData } from "@/lib/graphql/queries/tickets.query.ts";
+console.log(JSON.stringify(ticketsData, null, 2));
+---
+
+
+
+
+
+
+
+
+
+
What's Included
+
Everything you get with your OSD 2026 ticket
+
+
+ {
+ [
+ { label: "Full Conference Access", desc: "Access all keynotes, talks, panels, and networking sessions throughout the day." },
+ { label: "Lunch & Refreshments", desc: "Enjoy complimentary lunch and refreshments throughout the event." },
+ { label: "OSD Goodies", desc: "Take home exclusive OSD merchandise and community goodies." },
+ ].map(({ label, desc }) => (
+
+ ))
+ }
+
+
+
+
+
+
+
+
+
Frequently Asked Questions
+
+
+ {
+ [
+ { q: "When will tickets go on sale?", a: "Tickets are live now." },
+ { q: "Can I get a refund?", a: "Tickets are Non refundable and non transferable" },
+ { q: "Are student discounts available?", a: "No discount for students." },
+ { q: "What's included in the ticket?", a: "All tickets include conference access, lunch, keynotes, panels, and OSD goodies." },
+ ].map((faq) => (
+
+ ))
+ }
+
+
+
+
+
+
+ Questions about tickets?
+ opensourceweekend@gmail.com
+
+
diff --git a/src/pages/schedule.astro b/src/pages/schedule.astro
index ea09b74..b3c59a6 100644
--- a/src/pages/schedule.astro
+++ b/src/pages/schedule.astro
@@ -1,847 +1,847 @@
----
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
-import { eventSchedule, workshopSchedule } from "@/config/config.ts";
-import PageHero from "@/components/PageHero.jsx";
-
-// ── Type-to-style map ──────────────────────────────────────────────────────
-const typeStyles: Record = {
- registration: { pill: "bg-blue-50 text-blue-700 border-blue-100", bar: "bg-blue-400", label: "Registration" },
- opening: { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-400", label: "Opening" },
- activity: { pill: "bg-purple-50 text-purple-700 border-purple-100", bar: "bg-purple-400", label: "Activity" },
- keynote: { pill: "bg-yellow-50 text-yellow-700 border-yellow-100", bar: "bg-yellow-400", label: "Keynote" },
- talk: { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-400", label: "Talk" },
- break: { pill: "bg-gray-50 text-gray-500 border-gray-100", bar: "bg-gray-300", label: "Break" },
- "closing keynote": { pill: "bg-amber-50 text-amber-700 border-amber-100", bar: "bg-amber-400", label: "Closing Keynote" },
- closing: { pill: "bg-orange-50 text-orange-700 border-orange-100", bar: "bg-orange-400", label: "Closing" },
- social: { pill: "bg-pink-50 text-pink-700 border-pink-100", bar: "bg-pink-400", label: "Social" },
- workshop: { pill: "bg-teal-50 text-teal-700 border-teal-100", bar: "bg-teal-400", label: "Workshop" },
- panel: { pill: "bg-indigo-50 text-indigo-700 border-indigo-100", bar: "bg-indigo-400", label: "Panel" },
- "devroom (parallel)": { pill: "bg-violet-50 text-violet-700 border-violet-100", bar: "bg-violet-400", label: "Devroom" },
- "cxo panel discussion": { pill: "bg-lime-50 text-lime-700 border-lime-100", bar: "bg-lime-400", label: "CXO Panel" },
- "community panel discussion": { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-500", label: "Community Panel" },
-};
-const getStyle = (type: string) =>
- typeStyles[type.toLowerCase()] ?? { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-400", label: type };
-
-
----
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
My Schedule
-
Schedule
-
- 0
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Add to Calendar
-
Opening your sessions…
-
-
-
-
-
-
Google Calendar
-
Tap each session to add individually
-
-
-
-
-
-
-
-
-
Apple Calendar
-
iPhone, iPad & Mac — opens natively
-
-
-
-
-
-
-
-
-
Outlook / Other
-
Downloads .ics file to import
-
-
-
-
-
- Cancel
-
-
-
-
-
-
-
-
-
-
-
Google Calendar
-
Tap a session to add it
-
-
-
-
-
-
- Done
-
-
-
-
-
-
-
-
-
-
-
- Main Conference
-
-
A full day of talks, panels, workshops & networking
-
* Preview schedule — officially announced closer to the event
-
-
-
-
-
- Main Auditorium
- Secondary Hall (Devroom)
-
-
-
-
- {eventSchedule.map((session, i) => {
- const s = getStyle(session.type);
- const isParallelLeft = session.isPanelLeft;
- const isParallelRight = session.isPanelRight;
- const isFullWidth = !isParallelLeft && !isParallelRight;
- const sid = `conf-${i}`;
-
- return (
-
-
-
-
-
-
-
{session.time}
-
- {s.label}
- {isParallelLeft && Parallel }
- {isParallelRight && Main Hall }
-
-
-
-
-
-
- {session.title}
-
- {session.speaker &&
by {session.speaker}
}
-
-
-
-
- {session.room && (
-
-
-
-
-
- {session.room}
-
- )}
-
-
-
-
- Add to Schedule
-
-
-
-
-
- );
- })}
-
-
-
-
-
-
-
-
-
- Workshop Track
-
-
Hands-on sessions running in parallel to the main conference
-
-
-
-
- {workshopSchedule.map((item, i) => {
- const s = getStyle(item.type);
- const sid = `workshop-${i}`;
- return (
-
-
-
-
-
-
-
-
- {item.time}
- {s.label}
-
-
-
-
-
{item.title}
- {item.speaker &&
by {item.speaker}
}
-
-
-
-
-
-
-
-
- Add to Schedule
-
-
-
-
-
- );
- })}
-
-
-
-
-
-
-
- Want to be notified when the schedule is out?
- Follow us or get in touch directly
-
- opensourceweekend@gmail.com
-
-
-
-
-
-
-
-
-
+---
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+import { eventSchedule, workshopSchedule } from "@/config/config.ts";
+import PageHero from "@/components/PageHero.jsx";
+
+// ── Type-to-style map ──────────────────────────────────────────────────────
+const typeStyles: Record = {
+ registration: { pill: "bg-blue-50 text-blue-700 border-blue-100", bar: "bg-blue-400", label: "Registration" },
+ opening: { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-400", label: "Opening" },
+ activity: { pill: "bg-purple-50 text-purple-700 border-purple-100", bar: "bg-purple-400", label: "Activity" },
+ keynote: { pill: "bg-yellow-50 text-yellow-700 border-yellow-100", bar: "bg-yellow-400", label: "Keynote" },
+ talk: { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-400", label: "Talk" },
+ break: { pill: "bg-gray-50 text-gray-500 border-gray-100", bar: "bg-gray-300", label: "Break" },
+ "closing keynote": { pill: "bg-amber-50 text-amber-700 border-amber-100", bar: "bg-amber-400", label: "Closing Keynote" },
+ closing: { pill: "bg-orange-50 text-orange-700 border-orange-100", bar: "bg-orange-400", label: "Closing" },
+ social: { pill: "bg-pink-50 text-pink-700 border-pink-100", bar: "bg-pink-400", label: "Social" },
+ workshop: { pill: "bg-teal-50 text-teal-700 border-teal-100", bar: "bg-teal-400", label: "Workshop" },
+ panel: { pill: "bg-indigo-50 text-indigo-700 border-indigo-100", bar: "bg-indigo-400", label: "Panel" },
+ "devroom (parallel)": { pill: "bg-violet-50 text-violet-700 border-violet-100", bar: "bg-violet-400", label: "Devroom" },
+ "cxo panel discussion": { pill: "bg-lime-50 text-lime-700 border-lime-100", bar: "bg-lime-400", label: "CXO Panel" },
+ "community panel discussion": { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-500", label: "Community Panel" },
+};
+const getStyle = (type: string) =>
+ typeStyles[type.toLowerCase()] ?? { pill: "bg-green-50 text-green-700 border-green-100", bar: "bg-green-400", label: type };
+
+
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
My Schedule
+
Schedule
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Add to Calendar
+
Opening your sessions…
+
+
+
+
+
+
Google Calendar
+
Tap each session to add individually
+
+
+
+
+
+
+
+
+
Apple Calendar
+
iPhone, iPad & Mac — opens natively
+
+
+
+
+
+
+
+
+
Outlook / Other
+
Downloads .ics file to import
+
+
+
+
+
+ Cancel
+
+
+
+
+
+
+
+
+
+
+
Google Calendar
+
Tap a session to add it
+
+
+
+
+
+
+ Done
+
+
+
+
+
+
+
+
+
+
+
+ Main Conference
+
+
A full day of talks, panels, workshops & networking
+
* Preview schedule — officially announced closer to the event
+
+
+
+
+
+ Main Auditorium
+ Secondary Hall (Devroom)
+
+
+
+
+ {eventSchedule.map((session, i) => {
+ const s = getStyle(session.type);
+ const isParallelLeft = session.isPanelLeft;
+ const isParallelRight = session.isPanelRight;
+ const isFullWidth = !isParallelLeft && !isParallelRight;
+ const sid = `conf-${i}`;
+
+ return (
+
+
+
+
+
+
+
{session.time}
+
+ {s.label}
+ {isParallelLeft && Parallel }
+ {isParallelRight && Main Hall }
+
+
+
+
+
+
+ {session.title}
+
+ {session.speaker &&
by {session.speaker}
}
+
+
+
+
+ {session.room && (
+
+
+
+
+
+ {session.room}
+
+ )}
+
+
+
+
+ Add to Schedule
+
+
+
+
+
+ );
+ })}
+
+
+
+
+
+
+
+
+
+ Workshop Track
+
+
Hands-on sessions running in parallel to the main conference
+
+
+
+
+ {workshopSchedule.map((item, i) => {
+ const s = getStyle(item.type);
+ const sid = `workshop-${i}`;
+ return (
+
+
+
+
+
+
+
+
+ {item.time}
+ {s.label}
+
+
+
+
+
{item.title}
+ {item.speaker &&
by {item.speaker}
}
+
+
+
+
+
+
+
+
+ Add to Schedule
+
+
+
+
+
+ );
+ })}
+
+
+
+
+
+
+
+ Want to be notified when the schedule is out?
+ Follow us or get in touch directly
+
+ opensourceweekend@gmail.com
+
+
+
+
+
+
+
+
+
diff --git a/src/pages/speakers.astro b/src/pages/speakers.astro
index 18a5e15..1ad6af9 100644
--- a/src/pages/speakers.astro
+++ b/src/pages/speakers.astro
@@ -1,101 +1,101 @@
----
-import { Image } from "astro:assets";
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
-import PageHero from "@/components/PageHero.jsx";
-import { speakersData } from "@/lib/graphql/queries/speakers.query.ts";
-import { env } from "@/lib/env.ts";
-import type { ResolvedSpeaker, ResolvedSpeakerSection } from "@/types/speakers.types.ts";
-import { CALLS_2026 } from "@/config/config.ts";
-import Speaker from "@components/Speaker.astro";
-
-// ── helpers ──────────────────────────────────────────────────────────────────
-function resolveUrl(rawUrl: string | null | undefined): string | null {
- if (!rawUrl) return null;
- const trimmed = rawUrl.trim();
- if (!trimmed) return null;
- if (trimmed.startsWith("http")) return trimmed;
- return `${env.STRAPI_BASE_URL}${trimmed}`;
-}
-
-function resolveSpeaker(s: any): ResolvedSpeaker {
- return {
- ...s,
- imageUrl: resolveUrl(s.image?.url),
- // linkedin links sometimes have leading whitespace / newlines
- linkedinUrl: s.link ? s.link.trim() || null : null,
- };
-}
-
-function resolveSection(section: any): ResolvedSpeakerSection {
- return { ...section, speakers: section.speakers.map(resolveSpeaker) };
-}
-
-// ── data ─────────────────────────────────────────────────────────────────────
-const doc = speakersData?.speakers?.[0];
-
-const ourSpeakerSections: ResolvedSpeakerSection[] =
- (doc?.ourSpeakers ?? []).map(resolveSection);
-
-// ── Call for speaker data ─────────────────────────────────────────────────────────────────────
-
-// here first call is speaker that's why we use `0` here
-const deadline = CALLS_2026[0].deadline;
----
-
-
-
-
-
-
-
- {ourSpeakerSections.length > 0 && (
-
-
-
- {ourSpeakerSections.map((section) => (
-
-
-
-
-
-
-
-
- {section.title}
-
-
-
-
-
- {section.segment && (
-
-
-
-
- {section.segment}
-
-
-
- )}
-
-
-
-
-
- ))}
-
-
- )}
-
-
-
-
+---
+import { Image } from "astro:assets";
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+import PageHero from "@/components/PageHero.jsx";
+import { speakersData } from "@/lib/graphql/queries/speakers.query.ts";
+import { env } from "@/lib/env.ts";
+import type { ResolvedSpeaker, ResolvedSpeakerSection } from "@/types/speakers.types.ts";
+import { CALLS_2026 } from "@/config/config.ts";
+import Speaker from "@components/Speaker.astro";
+
+// ── helpers ──────────────────────────────────────────────────────────────────
+function resolveUrl(rawUrl: string | null | undefined): string | null {
+ if (!rawUrl) return null;
+ const trimmed = rawUrl.trim();
+ if (!trimmed) return null;
+ if (trimmed.startsWith("http")) return trimmed;
+ return `${env.STRAPI_BASE_URL}${trimmed}`;
+}
+
+function resolveSpeaker(s: any): ResolvedSpeaker {
+ return {
+ ...s,
+ imageUrl: resolveUrl(s.image?.url),
+ // linkedin links sometimes have leading whitespace / newlines
+ linkedinUrl: s.link ? s.link.trim() || null : null,
+ };
+}
+
+function resolveSection(section: any): ResolvedSpeakerSection {
+ return { ...section, speakers: section.speakers.map(resolveSpeaker) };
+}
+
+// ── data ─────────────────────────────────────────────────────────────────────
+const doc = speakersData?.speakers?.[0];
+
+const ourSpeakerSections: ResolvedSpeakerSection[] =
+ (doc?.ourSpeakers ?? []).map(resolveSection);
+
+// ── Call for speaker data ─────────────────────────────────────────────────────────────────────
+
+// here first call is speaker that's why we use `0` here
+const deadline = CALLS_2026[0].deadline;
+---
+
+
+
+
+
+
+
+ {ourSpeakerSections.length > 0 && (
+
+
+
+ {ourSpeakerSections.map((section) => (
+
+
+
+
+
+
+
+
+ {section.title}
+
+
+
+
+
+ {section.segment && (
+
+
+
+
+ {section.segment}
+
+
+
+ )}
+
+
+
+
+
+ ))}
+
+
+ )}
+
+
+
+
diff --git a/src/pages/sponsors.astro b/src/pages/sponsors.astro
index c358516..4a175ce 100644
--- a/src/pages/sponsors.astro
+++ b/src/pages/sponsors.astro
@@ -1,442 +1,442 @@
----
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
-import PageHero from "@/components/PageHero.jsx";
-import { sponsorsData } from "@/lib/graphql/queries/sponsors.query.ts";
-import type { SponsorGroup } from "@/types/sponsors.types.ts";
-import { env } from "@/lib/env.ts";
-import { Image } from "astro:assets";
-
-const rawGroups: SponsorGroup[] = sponsorsData?.sponsors?.[0]?.sponsors ?? [];
-
-const groups = rawGroups.map((group) => ({
- ...group,
- sponsors: group.sponsors.map((s) => ({
- ...s,
- logoUrl: s.logo?.url ? `${env.STRAPI_BASE_URL}${s.logo.url}`: null,
- })),
-}));
-
-const STATS = [
- { value: "600+", label: "Attendees" },
- { value: "50+", label: "Sessions" },
- { value: "100+", label: "Community Partners" },
- { value: "500+", label: "Meetups" },
- { value: "10 yrs", label: "Running" },
-];
-
-const TIERS = [
- {
- name: "Platinum",
- price: "$6000",
- tagline: "Maximum visibility & reach",
- perks: [
- "✅ Booth Space",
- "🎤 Technical Speaking Slot — 30–45 min",
- "🏷️ Logo on Digital Collateral, Website & Email Marketing, Merchandise, Certificates, Flex banner/Standee, Registration desk & Marketing kit in goodie bag + Brand video (2 min)",
- "🎟️ 20 Complimentary Event Passes",
- "🎁 Guest Momento & Goodies",
- "📣 3 Exclusive Social Media Posts",
- ],
- popular: false,
- cta: "Contact Organizers",
- },
- {
- name: "Gold",
- price: "$3500",
- tagline: "Best value — most popular",
- perks: [
- "❌ No Booth Space",
- "🎤 Technical Speaking Slot — 10–15 min",
- "🏷️ Logo on Digital Collateral, Website & Email Marketing, Merchandise, Certificates, Flex banner/Standee & logo on goodie bag",
- "🎟️ 10 Complimentary Event Passes",
- "🎁 Guest Momento & Goodies",
- "📣 2 Exclusive Social Media Posts",
- ],
- popular: true,
- cta: "Become a Sponsor",
- },
- {
- name: "Silver",
- price: "$2500",
- tagline: "Strong brand presence",
- perks: [
- "❌ No Booth Space",
- "🎤 Technical Speaking Slot — 8–10 min",
- "🏷️ Logo on Digital Collateral, Website, Merchandise, Certificates, Flex banner/Standee & logo on goodie bag",
- "🎟️ 5 Complimentary Event Passes",
- "🎁 Guest Momento & Goodies",
- "📣 1 Exclusive Social Media Post",
- ],
- popular: false,
- cta: "Contact Organizers",
- },
- {
- name: "Bronze",
- price: "$1200",
- tagline: "Great entry-level sponsorship",
- perks: [
- "❌ No Booth Space",
- "🎤 Technical Speaking Slot — 2–5 min",
- "🏷️ Logo on Digital Collateral, Website, Merchandise, Certificates, Flex banner/Standee",
- "🎟️ 2 Complimentary Event Passes",
- "🎁 Guest Momento & Goodies",
- "📣 Combined Social Media Post",
- ],
- popular: false,
- cta: "Contact Organizers",
- },
-];
-
-const exclusiveSponsorshipOpportunity = [
- { icon: "👕", label: "T-shirt Sponsor" },
- { icon: "🪪", label: "Lanyard + ID Card / Badge Sponsor" },
- { icon: "🎒", label: "Goodie Bag / Kit Sponsor" },
- { icon: "🏅", label: "Speaker Token of Appreciation Kit" },
- { icon: "📱", label: "Social Media Contest" },
- { icon: "🎁", label: "Giveaway Goodies" },
- { icon: "🍽️", label: "F&B Lunch / Dinner Sponsor" },
- { icon: "🥗", label: "Speaker Dinner Sponsor" },
- { icon: "💼", label: "Exclusive CXO Panel" },
- { icon: "🧑💻", label: "Sponsored Workshop" },
- { icon: "📋", label: "Job Fair" },
- { icon: "🤳", label: "Selfie Booth" },
-];
----
-
-
-
-
-
-
-
-
-
- {STATS.map(({ value, label }) => (
-
- ))}
-
-
-
-
-
-
- {groups.length > 0 && (
-
-
-
-
-
- Sponsors & Community Partners
-
-
We're grateful for the support of our partners.
-
-
- {groups.map((group) => (
-
-
-
-
-
- {group.title}
-
-
-
-
-
-
-
- ))}
-
-
- )}
-
-
-
-
-
-
- Sponsorship Tiers
-
-
Pick a tier that fits your goals
-
-
-
- {TIERS.map((tier) => (
-
-
- {tier.popular && (
-
- MOST POPULAR
-
- )}
-
-
{tier.name}
-
{tier.price}
-
{tier.tagline}
-
-
- {tier.perks.map((perk) => (
- {perk}
- ))}
-
-
-
- {tier.cta}
-
-
- ))}
-
-
-
-
-
-
-
-
-
-
-
Add-On
-
Exclusive Sponsorship Opportunities
-
Supercharge your presence at OSD 2026 with targeted add-on sponsorships. Mix and match to build a package that fits your brand.
-
-
- Contact Organizers
-
-
-
-
-
-
-
- {exclusiveSponsorshipOpportunity.map(({ icon, label }) => (
-
- {icon}
- {label}
-
- ))}
-
-
-
-
- Custom packages available —{" "}
- reach out to discuss .
-
-
-
-
-
-
-
-
-
-
-
- Why Sponsor OSD 2026?
-
-
- We offer a variety of sponsorship packages tailored to your needs. By becoming a sponsor, you gain valuable exposure to a highly targeted audience of tech professionals actively seeking open source solutions.
-
-
-
-
-
- {[
- {
- icon: "📡",
- title: "Brand Exposure",
- desc: "Showcase your brand to a diverse audience of tech enthusiasts and industry professionals through extensive event branding and promotion across multiple channels.",
- },
- {
- icon: "🎯",
- title: "Lead Generation",
- desc: "Connect with potential clients, partners, and top talent through direct interactions at your exhibition booth, during networking sessions, and through our event app.",
- },
- {
- icon: "🎙️",
- title: "Thought Leadership",
- desc: "Share your expertise through speaking engagements and panel discussions, positioning your company as a thought leader in the Open Source ecosystem.",
- },
- {
- icon: "🖥️",
- title: "Product Demonstration",
- desc: "Demonstrate your latest products and services to a captive audience, providing hands-on experiences and live demonstrations to showcase your solutions effectively.",
- },
- {
- icon: "🤝",
- title: "Corporate Social Responsibility",
- desc: "Highlight your commitment to supporting the tech community and fostering innovation by contributing to a prestigious event that encourages learning and collaboration.",
- },
- {
- icon: "🔗",
- title: "Brand Association",
- desc: "Associate your brand with Open Source — one of the most respected and innovative communities in the tech industry, reinforcing your company's innovative and forward-thinking image.",
- },
- ].map(({ icon, title, desc }) => (
-
- ))}
-
-
-
-
-
-
-
-
-
💡
-
Sponsorship Benefits
-
-
- Sponsorship benefits include:
-
-
- {[
- "Brand recognition and logo placement on all event materials (website, signage, etc.)",
- "Speaking opportunities to showcase your expertise and solutions",
- "Networking opportunities with potential customers and partners",
- "Access to a pool of talented Open Source developers",
- "Target audience reach",
- "Collaboration opportunity",
- ].map((item) => (
-
-
-
-
- {item}
-
- ))}
-
-
-
-
-
-
-
-
- Open Source Day 2026 attracts a diverse audience, including:
-
-
- {[
- "CEOs / CTOs",
- "Software Developers",
- "IT Professionals",
- "System Administrators",
- "Architects",
- "Data Scientists",
- "Business Decision-Makers",
- "Students & Aspiring Developers",
- ].map((person) => (
-
-
- {person}
-
- ))}
-
-
- This audience represents a significant growth opportunity for companies offering Open Source solutions and services.
-
-
-
-
-
-
-
-
-
-
- Interested in sponsoring?
-
-
- We'd love to partner with you. Drop us a line and let's make it happen.
-
-
-
-
-
+---
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+import PageHero from "@/components/PageHero.jsx";
+import { sponsorsData } from "@/lib/graphql/queries/sponsors.query.ts";
+import type { SponsorGroup } from "@/types/sponsors.types.ts";
+import { env } from "@/lib/env.ts";
+import { Image } from "astro:assets";
+
+const rawGroups: SponsorGroup[] = sponsorsData?.sponsors?.[0]?.sponsors ?? [];
+
+const groups = rawGroups.map((group) => ({
+ ...group,
+ sponsors: group.sponsors.map((s) => ({
+ ...s,
+ logoUrl: s.logo?.url ? `${env.STRAPI_BASE_URL}${s.logo.url}`: null,
+ })),
+}));
+
+const STATS = [
+ { value: "600+", label: "Attendees" },
+ { value: "50+", label: "Sessions" },
+ { value: "100+", label: "Community Partners" },
+ { value: "500+", label: "Meetups" },
+ { value: "10 yrs", label: "Running" },
+];
+
+const TIERS = [
+ {
+ name: "Platinum",
+ price: "$6000",
+ tagline: "Maximum visibility & reach",
+ perks: [
+ "✅ Booth Space",
+ "🎤 Technical Speaking Slot — 30–45 min",
+ "🏷️ Logo on Digital Collateral, Website & Email Marketing, Merchandise, Certificates, Flex banner/Standee, Registration desk & Marketing kit in goodie bag + Brand video (2 min)",
+ "🎟️ 20 Complimentary Event Passes",
+ "🎁 Guest Momento & Goodies",
+ "📣 3 Exclusive Social Media Posts",
+ ],
+ popular: false,
+ cta: "Contact Organizers",
+ },
+ {
+ name: "Gold",
+ price: "$3500",
+ tagline: "Best value — most popular",
+ perks: [
+ "❌ No Booth Space",
+ "🎤 Technical Speaking Slot — 10–15 min",
+ "🏷️ Logo on Digital Collateral, Website & Email Marketing, Merchandise, Certificates, Flex banner/Standee & logo on goodie bag",
+ "🎟️ 10 Complimentary Event Passes",
+ "🎁 Guest Momento & Goodies",
+ "📣 2 Exclusive Social Media Posts",
+ ],
+ popular: true,
+ cta: "Become a Sponsor",
+ },
+ {
+ name: "Silver",
+ price: "$2500",
+ tagline: "Strong brand presence",
+ perks: [
+ "❌ No Booth Space",
+ "🎤 Technical Speaking Slot — 8–10 min",
+ "🏷️ Logo on Digital Collateral, Website, Merchandise, Certificates, Flex banner/Standee & logo on goodie bag",
+ "🎟️ 5 Complimentary Event Passes",
+ "🎁 Guest Momento & Goodies",
+ "📣 1 Exclusive Social Media Post",
+ ],
+ popular: false,
+ cta: "Contact Organizers",
+ },
+ {
+ name: "Bronze",
+ price: "$1200",
+ tagline: "Great entry-level sponsorship",
+ perks: [
+ "❌ No Booth Space",
+ "🎤 Technical Speaking Slot — 2–5 min",
+ "🏷️ Logo on Digital Collateral, Website, Merchandise, Certificates, Flex banner/Standee",
+ "🎟️ 2 Complimentary Event Passes",
+ "🎁 Guest Momento & Goodies",
+ "📣 Combined Social Media Post",
+ ],
+ popular: false,
+ cta: "Contact Organizers",
+ },
+];
+
+const exclusiveSponsorshipOpportunity = [
+ { icon: "👕", label: "T-shirt Sponsor" },
+ { icon: "🪪", label: "Lanyard + ID Card / Badge Sponsor" },
+ { icon: "🎒", label: "Goodie Bag / Kit Sponsor" },
+ { icon: "🏅", label: "Speaker Token of Appreciation Kit" },
+ { icon: "📱", label: "Social Media Contest" },
+ { icon: "🎁", label: "Giveaway Goodies" },
+ { icon: "🍽️", label: "F&B Lunch / Dinner Sponsor" },
+ { icon: "🥗", label: "Speaker Dinner Sponsor" },
+ { icon: "💼", label: "Exclusive CXO Panel" },
+ { icon: "🧑💻", label: "Sponsored Workshop" },
+ { icon: "📋", label: "Job Fair" },
+ { icon: "🤳", label: "Selfie Booth" },
+];
+---
+
+
+
+
+
+
+
+
+
+ {STATS.map(({ value, label }) => (
+
+ ))}
+
+
+
+
+
+
+ {groups.length > 0 && (
+
+
+
+
+
+ Sponsors & Community Partners
+
+
We're grateful for the support of our partners.
+
+
+ {groups.map((group) => (
+
+
+
+
+
+ {group.title}
+
+
+
+
+
+
+
+ ))}
+
+
+ )}
+
+
+
+
+
+
+ Sponsorship Tiers
+
+
Pick a tier that fits your goals
+
+
+
+ {TIERS.map((tier) => (
+
+
+ {tier.popular && (
+
+ MOST POPULAR
+
+ )}
+
+
{tier.name}
+
{tier.price}
+
{tier.tagline}
+
+
+ {tier.perks.map((perk) => (
+ {perk}
+ ))}
+
+
+
+ {tier.cta}
+
+
+ ))}
+
+
+
+
+
+
+
+
+
+
+
Add-On
+
Exclusive Sponsorship Opportunities
+
Supercharge your presence at OSD 2026 with targeted add-on sponsorships. Mix and match to build a package that fits your brand.
+
+
+ Contact Organizers
+
+
+
+
+
+
+
+ {exclusiveSponsorshipOpportunity.map(({ icon, label }) => (
+
+ {icon}
+ {label}
+
+ ))}
+
+
+
+
+ Custom packages available —{" "}
+ reach out to discuss .
+
+
+
+
+
+
+
+
+
+
+
+ Why Sponsor OSD 2026?
+
+
+ We offer a variety of sponsorship packages tailored to your needs. By becoming a sponsor, you gain valuable exposure to a highly targeted audience of tech professionals actively seeking open source solutions.
+
+
+
+
+
+ {[
+ {
+ icon: "📡",
+ title: "Brand Exposure",
+ desc: "Showcase your brand to a diverse audience of tech enthusiasts and industry professionals through extensive event branding and promotion across multiple channels.",
+ },
+ {
+ icon: "🎯",
+ title: "Lead Generation",
+ desc: "Connect with potential clients, partners, and top talent through direct interactions at your exhibition booth, during networking sessions, and through our event app.",
+ },
+ {
+ icon: "🎙️",
+ title: "Thought Leadership",
+ desc: "Share your expertise through speaking engagements and panel discussions, positioning your company as a thought leader in the Open Source ecosystem.",
+ },
+ {
+ icon: "🖥️",
+ title: "Product Demonstration",
+ desc: "Demonstrate your latest products and services to a captive audience, providing hands-on experiences and live demonstrations to showcase your solutions effectively.",
+ },
+ {
+ icon: "🤝",
+ title: "Corporate Social Responsibility",
+ desc: "Highlight your commitment to supporting the tech community and fostering innovation by contributing to a prestigious event that encourages learning and collaboration.",
+ },
+ {
+ icon: "🔗",
+ title: "Brand Association",
+ desc: "Associate your brand with Open Source — one of the most respected and innovative communities in the tech industry, reinforcing your company's innovative and forward-thinking image.",
+ },
+ ].map(({ icon, title, desc }) => (
+
+ ))}
+
+
+
+
+
+
+
+
+
💡
+
Sponsorship Benefits
+
+
+ Sponsorship benefits include:
+
+
+ {[
+ "Brand recognition and logo placement on all event materials (website, signage, etc.)",
+ "Speaking opportunities to showcase your expertise and solutions",
+ "Networking opportunities with potential customers and partners",
+ "Access to a pool of talented Open Source developers",
+ "Target audience reach",
+ "Collaboration opportunity",
+ ].map((item) => (
+
+
+
+
+ {item}
+
+ ))}
+
+
+
+
+
+
+
+
+ Open Source Day 2026 attracts a diverse audience, including:
+
+
+ {[
+ "CEOs / CTOs",
+ "Software Developers",
+ "IT Professionals",
+ "System Administrators",
+ "Architects",
+ "Data Scientists",
+ "Business Decision-Makers",
+ "Students & Aspiring Developers",
+ ].map((person) => (
+
+
+ {person}
+
+ ))}
+
+
+ This audience represents a significant growth opportunity for companies offering Open Source solutions and services.
+
+
+
+
+
+
+
+
+
+
+ Interested in sponsoring?
+
+
+ We'd love to partner with you. Drop us a line and let's make it happen.
+
+
+
+
+
diff --git a/src/pages/team.astro b/src/pages/team.astro
index 9c21ffc..184d2aa 100644
--- a/src/pages/team.astro
+++ b/src/pages/team.astro
@@ -1,197 +1,197 @@
----
-import { Image } from "astro:assets";
-import PageHero from "@/components/PageHero.jsx";
-import Layout from "@/layouts/Layout.astro";
-import { teamsData } from "@/lib/graphql/queries/teams.query.ts";
-import { env } from "@/lib/env.ts";
-import type { ResolvedTeamGroup, ResolvedTeamMember } from "@/types/teams.types.ts";
-import "@/styles/2025/global.css";
-
-// Build full image URLs and resolve groups
-const rawGroups = teamsData?.teams?.[0]?.teams ?? [];
-
-const groups: ResolvedTeamGroup[] = rawGroups.map((group) => ({
- ...group,
- teams: group.teams.map((member) => ({
- ...member,
- imageUrl: member.image?.url
- ? member.image.url.startsWith("http")
- ? member.image.url
- : `${env.STRAPI_BASE_URL}${member.image.url}`
- : null,
- })),
-}));
----
-
-
-
-
-
-
-
- {groups.length > 0 && (
-
-
- {groups.map((group) => (
-
-
-
-
-
-
- {group.title}
-
-
-
-
-
-
-
-
-
- ))}
-
-
- )}
-
-
-
-
-
-
Volunteer Roles
-
Find the role that fits your skills and passion
-
-
- {[
- {
- title: "Event Coordination",
- desc: "Help plan sessions, manage timelines, and keep the event running smoothly.",
- icon: `
`,
- },
- {
- title: "Marketing & Outreach",
- desc: "Spread the word, manage social media, and grow the OSD 2026 community.",
- icon: `
`,
- },
- {
- title: "Technical Support",
- desc: "Support AV, live streaming, registration systems, and on-the-day tech.",
- icon: `
`,
- },
- ].map(({ title, desc, icon }) => (
-
-
-
-
-
{title}
-
{desc}
-
- ))}
-
-
-
-
-
-
-
- Want to join the team?
-
-
- We'd love to have you on board. Apply to volunteer or reach out to us directly.
-
-
-
-
-
+---
+import { Image } from "astro:assets";
+import PageHero from "@/components/PageHero.jsx";
+import Layout from "@/layouts/Layout.astro";
+import { teamsData } from "@/lib/graphql/queries/teams.query.ts";
+import { env } from "@/lib/env.ts";
+import type { ResolvedTeamGroup, ResolvedTeamMember } from "@/types/teams.types.ts";
+import "@/styles/2025/global.css";
+
+// Build full image URLs and resolve groups
+const rawGroups = teamsData?.teams?.[0]?.teams ?? [];
+
+const groups: ResolvedTeamGroup[] = rawGroups.map((group) => ({
+ ...group,
+ teams: group.teams.map((member) => ({
+ ...member,
+ imageUrl: member.image?.url
+ ? member.image.url.startsWith("http")
+ ? member.image.url
+ : `${env.STRAPI_BASE_URL}${member.image.url}`
+ : null,
+ })),
+}));
+---
+
+
+
+
+
+
+
+ {groups.length > 0 && (
+
+
+ {groups.map((group) => (
+
+
+
+
+
+
+ {group.title}
+
+
+
+
+
+
+
+
+
+ ))}
+
+
+ )}
+
+
+
+
+
+
Volunteer Roles
+
Find the role that fits your skills and passion
+
+
+ {[
+ {
+ title: "Event Coordination",
+ desc: "Help plan sessions, manage timelines, and keep the event running smoothly.",
+ icon: `
`,
+ },
+ {
+ title: "Marketing & Outreach",
+ desc: "Spread the word, manage social media, and grow the OSD 2026 community.",
+ icon: `
`,
+ },
+ {
+ title: "Technical Support",
+ desc: "Support AV, live streaming, registration systems, and on-the-day tech.",
+ icon: `
`,
+ },
+ ].map(({ title, desc, icon }) => (
+
+
+
+
+
{title}
+
{desc}
+
+ ))}
+
+
+
+
+
+
+
+ Want to join the team?
+
+
+ We'd love to have you on board. Apply to volunteer or reach out to us directly.
+
+
+
+
+
diff --git a/src/pages/tickets.astro b/src/pages/tickets.astro
index c274347..c457fa2 100644
--- a/src/pages/tickets.astro
+++ b/src/pages/tickets.astro
@@ -1,113 +1,113 @@
----
-import PageHero from "@/components/PageHero.jsx";
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
-
-import { ticketsData } from "@/lib/graphql/queries/tickets.query.ts";
-import Faq from "@components/Faq.astro";
-const ticketsResponse = ticketsData?.tickets?.[0]?.tickets || [];
----
-
-
-
-
-
-
-
-
-
-
Buy Tickets Now
-
Choose the ticket that fits you best
-
-
- {
- ticketsResponse.map((ticket: any) => (
-
- {ticket.alert && (
-
- {ticket.alert.text}
-
- )}
-
{ticket.name}
-
{ticket.price}
-
{ticket.description}
- {ticket?.featureTitle &&
{ticket?.featureTitle}
}
-
- {ticket?.features?.map((f: any) => (
-
-
-
-
- {f?.featureText ?? "-"}
-
- ))}
-
- {ticket.available ? (
-
- {ticket.linkText || "Coming Soon"}
-
- ) : (
-
- {ticket.linkText || "Coming Soon"}
-
- )}
- {ticket?.extra ?
{ticket.extra}
: null}
-
- ))
- }
-
-
-
-
-
-
-
-
-
What's Included
-
Everything you get with your OSD 2026 ticket
-
-
- {
- [
- { label: "Full Conference Access", desc: "Access all keynotes, talks, panels, and networking sessions throughout the day." },
- { label: "Lunch & Refreshments", desc: "Enjoy complimentary lunch and refreshments throughout the event." },
- { label: "OSD Goodies", desc: "Take home exclusive OSD merchandise and community goodies." },
- ].map(({ label, desc }) => (
-
- ))
- }
-
-
-
-
-
-
-
- Questions about tickets?
- opensourceweekend@gmail.com
-
-
+---
+import PageHero from "@/components/PageHero.jsx";
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+
+import { ticketsData } from "@/lib/graphql/queries/tickets.query.ts";
+import Faq from "@components/Faq.astro";
+const ticketsResponse = ticketsData?.tickets?.[0]?.tickets || [];
+---
+
+
+
+
+
+
+
+
+
+
Buy Tickets Now
+
Choose the ticket that fits you best
+
+
+ {
+ ticketsResponse.map((ticket: any) => (
+
+ {ticket.alert && (
+
+ {ticket.alert.text}
+
+ )}
+
{ticket.name}
+
{ticket.price}
+
{ticket.description}
+ {ticket?.featureTitle &&
{ticket?.featureTitle}
}
+
+ {ticket?.features?.map((f: any) => (
+
+
+
+
+ {f?.featureText ?? "-"}
+
+ ))}
+
+ {ticket.available ? (
+
+ {ticket.linkText || "Coming Soon"}
+
+ ) : (
+
+ {ticket.linkText || "Coming Soon"}
+
+ )}
+ {ticket?.extra ?
{ticket.extra}
: null}
+
+ ))
+ }
+
+
+
+
+
+
+
+
+
What's Included
+
Everything you get with your OSD 2026 ticket
+
+
+ {
+ [
+ { label: "Full Conference Access", desc: "Access all keynotes, talks, panels, and networking sessions throughout the day." },
+ { label: "Lunch & Refreshments", desc: "Enjoy complimentary lunch and refreshments throughout the event." },
+ { label: "OSD Goodies", desc: "Take home exclusive OSD merchandise and community goodies." },
+ ].map(({ label, desc }) => (
+
+ ))
+ }
+
+
+
+
+
+
+
+ Questions about tickets?
+ opensourceweekend@gmail.com
+
+
diff --git a/src/pages/venue.astro b/src/pages/venue.astro
index 065ea09..a40c74e 100644
--- a/src/pages/venue.astro
+++ b/src/pages/venue.astro
@@ -1,179 +1,179 @@
----
-import LocationIcon from "@/assets/icons/location.svg";
-import PageHero from "@/components/PageHero.jsx";
-import { SITE, VENUE } from "@/config/config.ts";
-import Layout from "@/layouts/Layout.astro";
-import "@/styles/2025/global.css";
----
-
-
-
-
-
-
-
-
-
-
Venue Details
-
-
-
-
-
-
-
-
Date & Time
-
{VENUE.date} · 9:00 AM - 6:00 PM
-
{VENUE.format}
-
-
-
-
-
-
-
-
-
Accessibility
-
- Wheelchair accessible venue
- Public transport connectivity
- Parking facilities available
-
-
-
-
-
-
-
-
Venue Features
-
-
- A Main Auditorium (600 seats)
-
-
- A Amphitheatre
-
-
- L Lawns and Open Event Grounds
-
-
- S Seminar and Workshop Rooms
-
-
- H High-Speed Campus WiFi
-
-
- L Library & Learning Resources
-
-
- C Cafeteria & Food Court
-
-
- P Parking & Accessible Facilities
-
-
-
-
-
-
-
-
-
-
-
-
-
Getting There
-
{SITE.city} is well connected by air, rail, and road
-
-
- {
- [
- {
- label: "By Air",
- desc: `Sardar Vallabhbhai Patel International Airport (AMD) serves ${SITE.city}.`,
- icon: `
`,
- },
- {
- label: "By Train",
- desc: `${SITE.city} Junction is well-connected to major cities across India.`,
- icon: `
`,
- },
- {
- label: "By Road",
- desc: `Excellent connectivity from across ${SITE.city} and neighboring states. Ample parking.`,
- icon: `
`,
- },
- ].map(({ label, desc, icon }) => (
-
-
-
-
-
{label}
-
{desc}
-
- ))
- }
-
-
-
-
-
-
- OSD 2025 was at Silver Oak University
- Check out the 2025 venue details and photos from the event.
-
- View 2025 Venue
-
-
-
-
-
- Want to be a venue partner?
- Reach out to us at
- opensourceweekend@gmail.com
-
-
+---
+import LocationIcon from "@/assets/icons/location.svg";
+import PageHero from "@/components/PageHero.jsx";
+import { SITE, VENUE } from "@/config/config.ts";
+import Layout from "@/layouts/Layout.astro";
+import "@/styles/2025/global.css";
+---
+
+
+
+
+
+
+
+
+
+
Venue Details
+
+
+
+
+
+
+
+
Date & Time
+
{VENUE.date} · 9:00 AM - 6:00 PM
+
{VENUE.format}
+
+
+
+
+
+
+
+
+
Accessibility
+
+ Wheelchair accessible venue
+ Public transport connectivity
+ Parking facilities available
+
+
+
+
+
+
+
+
Venue Features
+
+
+ A Main Auditorium (600 seats)
+
+
+ A Amphitheatre
+
+
+ L Lawns and Open Event Grounds
+
+
+ S Seminar and Workshop Rooms
+
+
+ H High-Speed Campus WiFi
+
+
+ L Library & Learning Resources
+
+
+ C Cafeteria & Food Court
+
+
+ P Parking & Accessible Facilities
+
+
+
+
+
+
+
+
+
+
+
+
+
Getting There
+
{SITE.city} is well connected by air, rail, and road
+
+
+ {
+ [
+ {
+ label: "By Air",
+ desc: `Sardar Vallabhbhai Patel International Airport (AMD) serves ${SITE.city}.`,
+ icon: `
`,
+ },
+ {
+ label: "By Train",
+ desc: `${SITE.city} Junction is well-connected to major cities across India.`,
+ icon: `
`,
+ },
+ {
+ label: "By Road",
+ desc: `Excellent connectivity from across ${SITE.city} and neighboring states. Ample parking.`,
+ icon: `
`,
+ },
+ ].map(({ label, desc, icon }) => (
+
+
+
+
+
{label}
+
{desc}
+
+ ))
+ }
+
+
+
+
+
+
+ OSD 2025 was at Silver Oak University
+ Check out the 2025 venue details and photos from the event.
+
+ View 2025 Venue
+
+
+
+
+
+ Want to be a venue partner?
+ Reach out to us at
+ opensourceweekend@gmail.com
+
+