This is the website for SRCCON 2026, built with Jekyll and deployed via GitHub Actions to AWS S3.
| Branch/Check | Status |
|---|---|
main |
|
staging |
|
| tests | |
| healthcheck |
- Quick Start
- Setup Checklist
- Local Development
- Repository Structure / Essential Files
- Troubleshooting
- Additional Resources
- Start Here: Run
bundle exec rake setup(one-time initialization - creates staging branch and swaps README files)- No
bundle?Try the Prerequisite steps below
- No
- Configure: Update
_config.ymlwith your event details (see the Setup Checklist below) - Create AWS Buckets: If you haven't already, create the
staging.<event>.srccon.organd<event>.srccon.orgbuckets AWS S3. Use the "Copy settings from existing bucket - optional" feature and the prior year's config to speed things up. - Develop: Run
bundle exec rake serveto preview locally at http://localhost:4000 - Workflow:
- Use
stagingor your own feature branch offstaging - Make changes and test locally as much as you like
- When you're ready, push or create a PR to merge your work into
staging - A successful push to
stagingwill start a GitHub Action that will try to auto-deploy your work tostaging.<event>.srccon.org - Smoke test and validate things on the staging URL
- When staging is ready, create a PR from
stagingtomainfor your production deployment
- Use
- Validate: Run
bundle exec rake checkandbundle exec rake testbefore merging tomain- some work on
stagingwill require this earlier, but it's worth checking again
- some work on
- Deploy to
main: When staging is exactly what you want to see live, mergestagingtomainvia PR or direct merge. This will kick off an auto-deployment to the production AWS S3 bucket which will render as<event>.srccon.org - Your first production deploy will fail! There's no good way to fix this ahead of time. You need to go into AWS Console and generate a
cloudfront_distribution_idfor_config.yml:- In AWS CloudFront, create a new distribution
- Set origin to your production S3 bucket website endpoint
- Configure appropriate cache behaviors and SSL certificate (copy prior events)
- Copy the distribution ID (looks like
E1234ABCDEFG) - Add to
_config.ymlunderdeployment:cloudfront_distribution_id: E1234ABCDEFG - Push changes and re-run deployment
- Future deploys will automatically invalidate the CloudFront cache
-
_config.yml- Update these values underdeployment:-
s3_bucket_staging- name of the staging bucket, oftenstaging.<event>.srccon.org -
s3_bucket_production- name of the user-facing public bucket,<event>.srccon.org
-
-
_config.yml- Update these values underdefaults:root_url- The full URL of your siteevent_name- Full event nameevent_date- Human-readable dateevent_place- Full locationevent_venue- Venue nameevent_venue_link- Maps or the Venue's own public siteevent_timezone- Timezone abbreviationevent_timezone_offset- UTC offsetevent_place_abbr- Short locationdescription- Meta description for SEO and various pages
-
layout- Which layout to use -
google_analytics_id- Set if using custom tracking -
cta_button_text&cta_button_link- Configure the main call-to-action button, from the default or commented out options, or something new -
schedule_live- Set totruewhen ready to show the program page -
session_deadline_passed- Set totruewhen participation form closessession_deadline- Participation form deadlinesession_confirm- When applicants hear back
- Ticket prices in
_config.yml:price_base- Base ticket priceprice_med- Mid-tier priceprice_full- Full priceprice_stipend- Stipend/scholarship price
-
media/img/srccon_logo.png- Main SRCCON logo- For topical SRCCONs, create custom logo from this Illustrator template
-
media/img/srccon_logo_share.png- Social media share card -
media/img/backgrounds/- Background images (if usinglayout_with_header_image)
-
_data/sessions.yml- Session data (seeded with placeholder/CTA) -
_includes/footer_sponsors.html- Customize sponsor footer if needed
-
_includes/- Checksimple_footer.htmlorfooter.htmlfor correct linked pages -
homepage.md- Uncomment hotel/room-block text when ready - Verify price usage in
homepage.md,attendees.md, andscholarships.md -
participation/form/- Ensure AirTable form renders and is set to allow third-party embeds -
sponsors/- Uncomment sponsors as they're confirmed, or add new entries -
sponsors/about/- Update numbers and contact info -
welcome.md- Update stenographer information if applicable
This project requires Ruby, Bundler, and Node.js. Check if you have them installed:
ruby --version # Should match .ruby-version
bundle --version # Should be 2.0 or higher
node --version # Should be 14.0 or higher (for Prettier)
npm --version # Should be 6.0 or higher| Tool | macOS/Linux | macOS (Homebrew) | Linux | Windows |
|---|---|---|---|---|
| Ruby | rbenv or rvm | brew install ruby |
Package manager (sudo apt install ruby-full) |
RubyInstaller |
| Bundler | gem install bundler |
gem install bundler |
gem install bundler |
gem install bundler |
| Node.js | rbenv or rvm | brew install node |
Package manager (sudo apt install nodejs npm) |
Node.js installer |
After installing Ruby and Node.js:
bundle install # Install Ruby dependencies
npm install # Install Node.js dependencies (Prettier)bundle exec rake clean # Clean the build directory
bundle exec rake build # Build the site to _site/
bundle exec rake serve # Serve locally with live reload at http://localhost:4000
bundle exec rake # Run clean, build, check, and serve in a loopbundle exec rake validate_yaml # Validate YAML syntax and duplicate keys
bundle exec rake check # Validate _config.yml configuration
bundle exec rake test # Run all tests (recommended)
bundle exec rake test:html_proofer # Test built HTML and links
bundle exec rake test:templates # Validate Liquid syntax
bundle exec rake test:page_config # Validate page setup
bundle exec rake test:placeholders # Find untouched defaults
bundle exec rake test:a11y # Very basic accessibility checks
bundle exec rake test:performance # Performance warnings
bundle exec rake review:external_links # Check external URLs (slower, requires network)
bundle exec rake outdated # Check for outdated _direct_ dependenciesIt is very helpful to maintain consistent code style across Ruby and non-Ruby files and keep change- and diff-histories easier to read in git/GitHub.
bundle install and npm install will enable our code-formatting support, available
in your IDE (depending on its features) and also via these bundle exec rake * commands:
bundle exec rake lint # Check all code formatting (Ruby + web/YAML/Markdown)
bundle exec rake format # Auto-fix all formatting issues
# Check only (no changes)
bundle exec rake format:ruby # Ruby files with StandardRB
bundle exec rake format:prettier # HTML/CSS/JS/YAML/Markdown with Prettier
# Auto-fix specific file types
bundle exec rake format:ruby_fix # Fix Ruby formatting
bundle exec rake format:prettier_fix # Fix non-Ruby formattingConfiguration Files:
The formatting behavior is controlled by:
.editorconfig- Editor settings (most editors support this automatically).prettierrc- Prettier formatting rules.prettierignore- Files excluded from Prettier.standard.yml- StandardRB configuration for Ruby files.vscode/settings.json- Editor workspace settings (see below)
If you're using VSCode or a VSCode-based editor (like Cursor or Antigravity), the repository includes pre-configured settings for automatic code formatting and problem detection. These editors share the same open-source foundation and all read .vscode/settings.json files.
Expected Behaviors:
Once configured, your editor will automatically:
- Format files on save - No need to run
bundle exec rake formatmanually - Format pasted content - Pasted code auto-adjusts to project style
- Show problems in real-time - Linting issues appear in the Problems tab (Cmd/Ctrl+Shift+M)
- Highlight syntax errors - Ruby, HTML, CSS, JS, YAML, and Markdown errors surface immediately
Setup Steps:
-
Install Required Extensions:
# Prettier - formats HTML, CSS, JS, JSON, YAML, Markdown code --install-extension esbenp.prettier-vscode # StandardRB - Ruby linting and formatting code --install-extension testdouble.vscode-standard-ruby # OR use Ruby LSP (includes StandardRB plus autocomplete, go-to-definition) code --install-extension shopify.ruby-lsp # Red Hat YAML - validates YAML syntax and flags duplicate keys as you type code --install-extension redhat.vscode-yaml
Note: The
codecommand works with VSCode and most VSCode-based editors. Alternatively, install extensions through your editor's Extensions panel. -
Reload Your Editor:
- Run "Developer: Reload Window" from Command Palette (Cmd/Ctrl+Shift+P)
- Or restart your editor
-
Verify It's Working:
- Open any file and save it - it should auto-format
- Check status bar (bottom-right) - should show "Prettier" or "StandardRB"
- Make a formatting mistake and save - it should auto-correct
Editor Compatibility:
These settings work with VSCode and any editor built on the same open-source codebase (like Cursor, Antigravity, VSCodium, etc.), as they all read .vscode/ configuration files.
Manual Formatting (Alternative):
If you prefer not to use a VSCode-based editor or want to format all files at once:
bundle exec rake format # Format all files
bundle exec rake lint # Check formatting without changing filesDeployment happens automatically via GitHub Actions:
- Merge PR to
staging→ Staging environment (S3 only) - Merge PR to
main→ Production (S3 + CloudFront invalidation oncecloudfront_distribution_idis set)
- AWS access is configured automatically via GitHub Actions using OpenID Connect (OIDC)
- Your repository needs access to the organization-level
AWS_ROLE_ARNsecret - No additional AWS credentials needed for automated deployments off
stagingormain - For
main, CloudFront cache invalidation takes 5-10 minutes to propagate before the public site reflects your work
Manual deployment is rarely needed since GitHub Actions handles deployment automatically. Use manual deployment only for emergency hotfixes or if GitHub Actions is unavailable.
The organization-level AWS_ROLE_ARN secret (OIDC) only works in GitHub Actions. For local deployment, configure traditional AWS credentials:
# Get AWS Access Key ID and Secret from OpenNews AWS administrator
aws configure
# Region: us-east-1
# Output format: json
# Verify access
aws s3 lswelcome.md- Attendee FAQ guideparticipation_form.md- Session proposal guideprogram.md- Session schedule (unlinked untilschedule_live: true)sponsors.md- Sponsor listsponsors_about.md- Sponsor solicitationscholarships.md- Scholarship infovolunteer.md- Volunteer infoconduct.md- Code of conduct
_data/- YAML data for sessions and structured content_includes/- Partial templates (footers, navigation, metadata, session tables)media/- Static CSS, JS, and image assets
- Jekyll & Dependencies:
_config.yml- Primary site configuration (event details, feature flags, deployment settings)Gemfile/Gemfile.lock- Ruby dependencies (Jekyll, plugins, testing tools)package.json/package-lock.json- Node.js dependencies (Prettier).ruby-version- Ruby version specification
- Editor & Code Quality:
.vscode/settings.json- VSCode/Cursor/Antigravity workspace settings (format-on-save, linting).editorconfig- Cross-editor formatting rules (indentation, line endings, etc.).prettierrc/.prettierignore- Prettier formatter configuration.standard.yml- StandardRB Ruby linter configuration
- Version Control:
.gitignore- Git ignore patterns
- Build System:
Rakefile-:build,:serve, and:deploycommands used by humans and GitHub Actionstasks/*.rake- Test and validation task definitions, used by humans and GitHub Actions
- Deployment:
.github/workflows/- GitHub Actions runs automated deployment on merges to specifically named branchesdeploy.yml- Deploys static site to S3's staging or production buckets, depending on the branchtest.yml- Runs on all PRs and some automated commits, to validate they don't break thingshealth-check.yml- Weekly automated validation check
- Generated/Ignored:
_site/- Build output directory (git-ignored, deployed to AWS).jekyll-cache/- Local development cache (git-ignored)
- Layout Templates:
_layouts/- Page layouts:simple_layout.html- Clean design with solid backgrounds (default and recommended)layout_with_header_image.html- Large photo headers (requires custom background images and other cleanup)
For common issues and solutions, see TROUBLESHOOTING.md, which covers:
- First-time setup - Steps for getting started after cloning
- Quick triage - Identify your issue quickly (won't build, looks wrong, changes not showing)
- Environment issues - Ruby version, gems, Node.js
- Build problems - Cache issues, server won't start
- Jekyll errors - Liquid syntax, includes, layouts, variables
- YAML issues - Config and data file syntax
- Deployment - CloudFront cache, AWS configuration
- Manual testing - Pre-commit smoke testing checklist
- Jekyll Documentation: https://jekyllrb.com/docs/
- GitHub Actions Workflows: See
.github/workflows/for deployment automation - Rake Tasks: Run
bundle exec rake -Tto see all available tasks