Skip to content

red-team-offense-village/website

Repository files navigation

Red Team Village Website

Deploy Hugo site to Pages Website

This git repository contains the website for the Red Team Village organization. Someone should really update it to make it suck less.

Local Dev

To test changes locally you will need to install:

  • Hugo (We recommend using Homebrew)
  • Yarn

Install yarn dependencies:

yarn install

Then run the Hugo server locally:

hugo server

This will launch a local web server running on http://127.0.0.1:1313/website/ that auto-updates the test site live when changes are detected on disk.

Pull Request Previews

We use Netlify for automatic preview deployments of pull requests. When you create a PR:

  1. Netlify will automatically build a preview of your changes
  2. A preview URL will be posted as a comment on your PR
  3. The preview URL format will be: https://deploy-preview-{PR-number}--{site-name}.netlify.app
  4. Preview deployments are automatically cleaned up after 30 days

This allows reviewers to see your changes live before merging.

Optional: Pre-commit Hooks

We use pre-commit hooks to maintain code quality. While optional, these hooks help ensure consistent formatting and prevent common issues. To use them:

  1. Install pre-commit:

    pip install pre-commit
  2. Install the hooks:

    pre-commit install

The hooks will run automatically before each commit and will:

  • Check file formatting (without modifying files)
  • Prevent direct commits to the main branch
  • Validate YAML, JSON, and TOML files

If any checks fail, you'll need to fix the issues manually before committing.

Manual Formatting

To check or fix formatting issues manually:

  1. Check formatting of staged files (no modifications):

    pre-commit run prettier
  2. Fix formatting of staged files:

    npx prettier --write $(git diff --cached --name-only --diff-filter=ACMR)
  3. Check all files (no modifications):

    pre-commit run prettier --all-files --hook-stage manual
  4. Fix all files:

    npx prettier --write .

Directory Structure

Configuration can be managed in the file hugo.toml. It is unlikely you'll need to touch this.

The primary folder you'll be working with is data/ which contains all the main Pages, such as Team, Sponsors, Updates, Venue, Schedule, etc.

Anything that should be deployed to the final website and not rendered through Hugo and go directly into the static/ directory.

Homepage "Latest Updates" Content Instructions

To add/remove/delete a "Latest Updates" entry on the main page, browse to the data/updates.json file and make changes there. Newer entries should be added to the top of the file. The structure of an entry follows:

updates
|_title
|_date
|_content
|_tag
|_image
| |_src
| |_alt
|_url
| |_href
| |_text

title: This is the title of the update, appears at the top of the update in bold.
date: This is the update posting date.
content: This is the text of the update.
tag: This is the pill tag associated with the update.
image: This is an optional parameter where you can specify the image file name to display with the update. Images should be added to the static/assets/images/updates folder.
url: This is an optional URL to display a Call-to-Action button with the update. If the link is external, the site will include an icon indicating that the link is external.

Exmaple Update Entry:

{
  "title": "RTV CRON Workshop Call for Workshops",
  "date": "March 6, 2025",
  "content": "We're looking for speakers for our RTV CRON workshop series! If you're interested in speaking, please fill out the Call on Sessionize. We're looking for a two hour workshop on a topic of your choice (as long as it's related to offensive security). For examples of what we're looking for, check out the RTV Overflow videos which we recently released on our YouTube channel.",
  "tag": ["RTV CRON", "Call for Workshops"],
  "image": {
    "src": "RTVcron-cfw.png",
    "alt": "Red Team Village Conference 2023"
  },
  "url": {
    "href": "https://sessionize.com/rtv-cron/",
    "text": "Answer the Call!",
    "target": "_blank"
  }
}

Team Page Content Instructions

To modify the content of the team page, edit the data/team.json file. All entries here will be rendered in order of appearance within the file, so slot in a new entry on the appropriate space in the file. The structure of a team entry is as follows:

team
|_members []
|  |_name
|  |_handle
|  |_role
|  |_image
|  |_linkedin
|  |_twitter

name: Team member's Name.
handle: Team member's handle.
role: Team member's role.
image: Image name. Images should be added to the static/assets/images/team folder.
linkedin: URL of member's LinkedIn page.
twitter: URL of member's Twitter/X profile.

Example Team Member Entry:

{
  "name": "Mike Lisi",
  "handle": "@mikehacksthings",
  "role": "President",
  "image": "mike-240x240.png",
  "linkedin": "https://www.linkedin.com/in/mikelisi/",
  "twitter": "https://x.com/mikehacksthings"
}

Sponsors Page Content Instructions

To modify the content of the sponsors page, edit the data/sponsors.json file. All entries here will be rendered in order of appearance within the file, so slot in a new entry on the appropriate space in the file.

This is a little more complex since we can have multiple events listed with sponsors associated with each event.

The structure of the file is as follows:

events
|_Name
|_Dates
|_Location
|_Description
|_Image
|_Levels []
|  |_Name
|  |_Sponsors []
|    |_Name
|    |_Logo
|    |_Website
|    |_Description

The structure of an entry follows:

events:
name: Name of the event.
dates: Dates of the event.
location: Location of the event.
description: Description of the event.
image: Image for the event.
levels: Structure containing an array of sponsor levels.

levels:
name: Name of the sponsor level.
sponsors: Structure containing an array of sponsors.

sponsors:
name: Name of the sponsor.
logo: Logo of the sponsor.
website: Website of the sponsor.
description: Description of the sponsor.

Example Entry:

  "events": [
      {
        "name": "DEF CON 33 (2025)",
        "dates": "August 7-10, 2025",
        "location": "Las Vegas, Nevada",
        "description": "Join us at the world's largest hacker convention where Red Team Village will host workshops, capture the flag competitions, more!",
        "image": "dc33.png",
        "levels": [
          {
            "name": "Diamond",
            "sponsors": [
              {
                "name": "Security Corp Inc.",
                "logo": "security-corp.png",
                "website": "https://securitycorp.example.com",
                "description": "Industry leader in penetration testing and security analysis, providing enterprise solutions for over 15 years."
              }
            ]
          }
        ]
      }
    ]
  }

About

New RTV website

Resources

Stars

Watchers

Forks

Contributors 6