Skip to content

About

Official website for PyData Indore

Resources

Stars

0 stars

Watchers

0 watching

Forks

Β 
Β 

Latest commit

Β 

History

48 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

PyData Indore Website

Live Site License PRs Welcome Contributors Stars

The official website for PyData Indore, a local chapter of the global PyData network.

🌐 Live Site: https://indore.pydata.org

About PyData Indore

PyData Indore is part of the global PyData network, an educational program of NumFOCUS, a 501(c)(3) nonprofit organization. We bring together data enthusiasts, practitioners, and researchers in Central India to share ideas and learn from each other. Our community focuses on Python, data science, machine learning, and open-source technologies.

πŸš€ Quick Start

This site is built with Jekyll β€” the same static-site generator GitHub Pages runs. Pages are Liquid templates with YAML front matter, and the nav, footer, and <head> come from shared layouts and includes.

⚠️ You need to run Jekyll β€” a plain static file server will not work. Opening the .html files directly, or serving them with python -m http.server / npx serve / VS Code Live Server, shows raw front matter and no navigation or footer, because nothing has processed the templates.

Prerequisites

Check what you have:

ruby -v      # should be 3.x
bundle -v

Run it locally

# 1. Clone your fork
git clone https://github.com/pydataindore/pydataindore.github.io.git
cd pydataindore.github.io

# 2. Install dependencies β€” first time, and after any Gemfile change
bundle install

# 3. Start the dev server
bundle exec jekyll serve

Open http://localhost:4000.

Edits to .html, .css, and .js files rebuild automatically β€” just refresh. The dev server sends no-cache headers (configured in _config.yml), so you should not need a hard refresh.

Useful flags:

Command What it does
bundle exec jekyll serve --livereload Auto-refreshes the browser on save
bundle exec jekyll serve --port 4001 Use a different port
bundle exec jekyll serve --no-watch Serve without rebuilding on change
bundle exec jekyll build Build once into _site/ without serving

_config.yml is the exception β€” Jekyll does not watch it. Restart the server after editing it.

Checking a production build

Local runs use the development environment, so Google Analytics never loads and no hits are sent. To build exactly what GitHub Pages will publish:

# macOS / Linux
JEKYLL_ENV=production bundle exec jekyll build

# Windows PowerShell
$env:JEKYLL_ENV="production"; bundle exec jekyll build

Troubleshooting

The site renders unstyled β€” white background, giant logo, no layout. Your _site/ output is stale or corrupt. This happens most often when jekyll build is run while jekyll serve is already watching, since both write to _site/ at once. Stop every Jekyll process, then:

rm -rf _site .jekyll-cache
bundle exec jekyll build

Because _site/ is generated and gitignored, deleting it is always safe.

bundle install fails to build native extensions. Your Ruby install is missing development headers β€” on Windows, reinstall Ruby using RubyInstaller with Devkit.

cannot load such file -- webrick. Run bundle install; webrick is in the Gemfile for exactly this reason on Ruby 3.x.

🌍 Deployment

Deployment is automatic β€” there is no build step to run and no GitHub Actions workflow.

  1. Merge to main on pydataindore/pydataindore.github.io
  2. GitHub Pages rebuilds the site with the github-pages gem (Settings β†’ Pages β†’ Deploy from a branch β†’ main / root)
  3. The change is live at https://indore.pydata.org, usually within a couple of minutes

Things to know:

  • The custom domain comes from the CNAME file at the repo root. Deleting or editing it breaks indore.pydata.org β€” leave it alone.
  • Only plugins on the GitHub Pages allowlist will run. The Gemfile pins the github-pages gem so your local build matches production; add only allowlisted plugins (the site enables jekyll-sitemap in _config.yml), never arbitrary ones.
  • Never commit _site/. It is build output and is gitignored.
  • If a deploy looks wrong, check the repo's Actions tab β€” the pages-build-deployment run reports Jekyll build failures there.

πŸ” SEO & Social Previews

The <head> in _layouts/default.html builds SEO and social tags for every page from its front matter, so individual pages rarely need to touch them.

  • Sitemap β€” generated automatically by the jekyll-sitemap plugin at build time (/sitemap.xml). Nothing to maintain; any page with front matter is included. Add sitemap: false to a page's front matter to exclude it.
  • robots.txt β€” at the repo root, allows all crawlers and points them at the sitemap.
  • Canonical + Open Graph + Twitter tags β€” emitted per page from title, description, and image. og:url and the canonical link use the page's pretty URL.
  • Structured data β€” _includes/structured-data.html adds sitewide Organization + WebSite JSON-LD. Event detail pages are good candidates for adding their own Event schema on top.
  • Social preview image β€” defaults to the PyData Indore logo card. Override per page with image: in front matter, and use a raster (JPG/PNG) β€” SVG is ignored by Facebook, LinkedIn, WhatsApp, and X.

Brand logo & favicons

The logo lives at Assets/images/Logos/PyData_Indore/:

File Used for
PyData-Indore.svg Nav logo, share-page avatar, and the modern SVG favicon
PyData-Indore-og.png (1200Γ—630) Default social-share preview (_config.yml)
PyData-Indore-icon-512.png PNG favicon fallback + schema.org logo
PyData-Indore-icon-180.png apple-touch-icon

The three PNGs are rasterized from the SVG. To regenerate them after a logo change, render the SVG with a headless browser (e.g. Playwright/Chromium) and recompose onto the target canvases with Pillow β€” no cairosvg or ImageMagick required.

πŸ“ Project Structure

pydataindore.github.io/
β”œβ”€β”€ _config.yml                   # Site-wide settings, defaults, plugins, build config
β”œβ”€β”€ Gemfile                       # Pins the github-pages gem (matches production)
β”œβ”€β”€ CNAME                         # Custom domain β€” do not remove
β”œβ”€β”€ robots.txt                    # Allows crawlers, points to the sitemap
β”‚
β”œβ”€β”€ _layouts/
β”‚   └── default.html              # The page shell: <head>, meta/OG tags, canonical, favicons, scripts
β”œβ”€β”€ _includes/
β”‚   β”œβ”€β”€ nav.html                  # Navigation (edit links here, once)
β”‚   β”œβ”€β”€ footer.html               # Footer
β”‚   β”œβ”€β”€ structured-data.html      # JSON-LD (Organization + WebSite) for SEO
β”‚   β”œβ”€β”€ announcement.html         # Site-wide moving announcement ticker (currently off β€” see _layouts/default.html)
β”‚   β”œβ”€β”€ cookie-consent.html       # Consent banner (gates analytics)
β”‚   └── analytics.html            # GA4 β€” production builds only
β”‚
β”œβ”€β”€ index.html                    # Homepage
β”œβ”€β”€ about.html                    # About PyData and our chapter
β”œβ”€β”€ events.html                   # Upcoming and past events
β”œβ”€β”€ team.html                     # Team & organizers
β”œβ”€β”€ sponsors.html                 # Sponsors and partners
β”œβ”€β”€ contact.html                  # Contact form and FAQs
β”œβ”€β”€ volunteer.html                # Volunteer & co-organizer framework
β”œβ”€β”€ code-of-conduct.html          # Community guidelines
β”œβ”€β”€ privacy-policy.html           # Privacy policy
β”œβ”€β”€ share.html                    # Link-hub page for socials / QR
β”‚
β”‚   # Event detail pages β€” one per event
β”œβ”€β”€ meet-1.html                   # Meet #1 (23 May 2026)
β”œβ”€β”€ hack-days.html                # PyData Indore Hack Days (18 Jul 2026)
β”œβ”€β”€ ikigai-2026.html              # IKIGAI 2026 β€” community partnership
β”‚
β”œβ”€β”€ Assets/
β”‚   β”œβ”€β”€ CSS/
β”‚   β”‚   β”œβ”€β”€ style.css             # Main stylesheet β€” shared by every page
β”‚   β”‚   β”œβ”€β”€ hack-days.css         # Page-specific (loaded via `extra_css`)
β”‚   β”‚   └── ikigai-2026.css       # Page-specific (loaded via `extra_css`)
β”‚   β”œβ”€β”€ JavaScript/
β”‚   β”‚   └── main.js               # Nav, theme switcher, carousels, forms
β”‚   └── images/
β”‚       β”œβ”€β”€ Logos/
β”‚       β”‚   β”œβ”€β”€ PyData_Indore/    # Brand logo: PyData-Indore.svg + og/icon rasters
β”‚       β”‚   └── ...               # Partner & sponsor logos
β”‚       β”œβ”€β”€ Team/                 # Team photos
β”‚       β”œβ”€β”€ Meetup1/ HackDays/ IKIGAI/   # Per-event assets
β”‚       └── ...
β”‚
β”œβ”€β”€ _site/                        # Build output (incl. generated sitemap.xml) β€” gitignored
└── README.md                     # This file

🎨 Design Features

  • Modern Dark Theme: Electric Lime (#a3e635) with Hot Magenta (#e879f9) accents on near-black (#080808)
  • Typography: Google Fonts (Space Mono, Syne) for modern, readable text
  • Visual Effects: Grain overlay texture and floating shape animations
  • Responsive Design: Mobile-first approach, works seamlessly on all devices
  • Smooth Animations: Scroll-triggered effects, hover transitions, and interactive elements
  • Accessible: Following WCAG guidelines with proper ARIA labels
  • Fast Loading: No heavy frameworks, pure HTML/CSS/JavaScript
  • Modern UI: Card-based layouts, gradient backgrounds, and glassmorphism effects

πŸ›  Technologies Used

  • Jekyll + Liquid: Static site generation β€” shared layouts, includes, and pretty URLs
  • HTML5: Semantic markup
  • CSS3: Custom properties, Grid, Flexbox, animations
  • JavaScript (ES6+): Vanilla JS for interactivity β€” no frameworks, no bundler
  • Google Fonts: Space Mono and Syne font families
  • GitHub Pages: Hosting and automatic builds, on the custom domain indore.pydata.org

πŸ›  Customization

Updating Content

  • Events: Edit events.html for the listing. Events with their own page (hack-days.html, ikigai-2026.html, …) also get a preview card on index.html
  • Sponsors: Update sponsors.html with sponsor information
  • Team Members: Update team.html
  • Contact info & social links: Edit _includes/footer.html β€” it is shared by every page
  • Navigation: Edit _includes/nav.html
  • Images: Add to Assets/images/ (per-event subfolder where it makes sense) and reference with a root-relative path, e.g. /Assets/images/IKIGAI/poster.jpeg

Styling

The CSS uses custom properties (CSS variables) for easy theming:

:root {
    --color-primary: #a3e635;       /* Electric Lime */
    --color-primary-dark: #84cc16;  /* Darker Lime */
    --color-primary-light: #d9f99d; /* Lighter Lime */
    --color-accent: #e879f9;        /* Hot Magenta */
    --color-accent-light: #f0abfc;  /* Light Magenta */
    --color-accent-dark: #d946ef;   /* Dark Magenta */
    --color-dark: #080808;          /* Near-black background */
    --color-dark-soft: #0f0f0f;     /* Soft dark surface */
}

The site also ships alternate themes (cyberpunk, coral, amber) as [data-theme="…"] overrides on :root, toggled by the floating switcher that main.js injects. Always style with these variables rather than hardcoded hex values β€” anything hardcoded will ignore the user's chosen theme.

You can customize the theme by modifying these variables in Assets/CSS/style.css.

Adding New Pages

Create an .html file at the repo root containing only your page content β€” no <html>, <head>, <nav>, or <footer>. Those come from _layouts/default.html. Start it with YAML front matter:

---
permalink: "/your-page/"                     # the URL β€” trailing slash, no .html
title: "Your Page | PyData Indore"           # <title> + OG/Twitter title
description: "One or two sentences."         # meta description + social preview
active: "events"                             # which nav item to highlight
extra_css: "/Assets/CSS/your-page.css"       # optional, page-specific styles
image: "/Assets/images/your-og-image.jpg"    # optional, social preview image
---

Front matter reference:

Key Required Notes
permalink yes Pretty URL, e.g. /hack-days/. Always link to pages this way β€” never page.html.
title yes Shown in the browser tab and social previews.
description yes Used for SEO and link previews.
active yes One of home, about, events, team, coc, sponsors. Event pages use events.
extra_css no Only for genuinely page-specific styling; shared styles belong in style.css.
image no Social-preview image. Must be a raster (JPG/PNG) β€” social platforms ignore SVG. Defaults to the PyData Indore logo card (PyData-Indore-og.png, set in _config.yml).

The layout is applied automatically by the defaults in _config.yml β€” you do not need to declare it.

To add the page to the main navigation, edit _includes/nav.html β€” once. It is shared by every page, so there is no longer any need to update links file by file.

πŸ“ Content Guidelines

  • All events should follow the NumFOCUS Code of Conduct
  • Use inclusive language
  • Keep content professional and educational
  • Credit speakers and contributors appropriately

🀝 Contributing

We welcome contributions! Here's how to help:

  1. Fork the repository
  2. Add the upstream remote (only needed once):
    git remote add upstream https://github.com/pydataindore/pydataindore.github.io.git
  3. Create a feature branch from the latest upstream:
    git fetch upstream
    git checkout -b feature/your-feature upstream/main
  4. Make your changes, then check them locally before committing:
    bundle exec jekyll serve      # then open http://localhost:4000
    Look at the page you changed at both desktop and mobile widths, and click through any links you added. See Quick Start if this is your first run.
  5. Commit:
    git commit -m 'PYD-XX Description of change'
  6. Push to your fork and open a Pull Request:
    git push origin feature/your-feature

Important β€” Squash & Merge: This repo uses Squash and Merge for all PRs. After your PR is merged, your local commits will have different hashes from upstream. Clean up your fork with:

git fetch upstream
git reset --hard upstream/main
git push --force-with-lease origin main

⚠️ Do not use GitHub's "Sync fork" button β€” it creates merge commits that permanently pollute your history.

Areas We Need Help With

  • 🎨 Design improvements and UI/UX enhancements
  • πŸ“± Mobile experience optimizations
  • β™Ώ Accessibility improvements (WCAG compliance)
  • 🌐 Content translation (Hindi and other languages)
  • πŸ“Έ Event photos and graphics
  • πŸ§ͺ Testing and bug fixes
  • πŸ“ Documentation improvements
  • πŸš€ Performance optimizations

πŸ‘₯ Contributors

Thanks to everyone who has contributed to this project!

Sumit S Chawla
Sumit S Chawla

Organizer & Lead Dev
Jagdish Prajapati
Jagdish Prajapati

Contributor

Want to see your avatar here? Contribute to the project!

πŸ“§ Contact

πŸ“„ License

This project is licensed under the MIT License. See the LICENSE file for details (if available).

πŸ”§ Development Notes

  • Navigation and footer live in _includes/ β€” edit nav.html or footer.html once, not every page
  • Link with pretty URLs: /events/, not /events.html. Use root-relative paths (/Assets/...) so links work from nested URLs
  • Styling is centralized in Assets/CSS/style.css. Reach for a page-specific file via extra_css only when the styles genuinely belong to one page
  • Theming uses CSS custom properties with [data-theme="…"] overrides, so use var(--color-primary) and friends rather than hardcoding hex values β€” otherwise the theme switcher won't affect your work
  • JavaScript is centralized in Assets/JavaScript/main.js β€” vanilla, no build step
  • Optimize images before committing. Resize to roughly 2Γ— their displayed width and export as JPEG/WebP; multi-MB files slow the site down noticeably
  • Analytics only run in production and only after consent, so local development never sends hits
  • Hacktoberfest popup clicks: hacktoberfest_register_click counts clicks to MLH and hacktoberfest_details_click counts clicks to the event page. Both include event_id: hacktoberfest_2026, placement: home_popup, and link_url. These measure clicks, not completed registrations. New visitors see the cookie banner first, then the popup after either Accept or Decline; only accepted analytics consent enables click tracking. Visitors with an existing cookie choice can see the popup immediately. The popup appears only once per browser, with its seen flag saved when shown (not while waiting for consent). Clearing pydata-hacktoberfest-2026-promo-seen in browser local storage lets you preview the popup again before its expiry. Events use the existing production GA4 property; local builds do not send them.
  • Never commit _site/ β€” it is generated output

πŸ™ Acknowledgments

  • PyData Global for the global network and support
  • NumFOCUS for fiscal sponsorship
  • All our volunteers and community members
  • Our sponsors who make events possible

Made with ❀️ by the PyData Indore community

About

Official website for PyData Indore

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages