Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ repos:
- id: check-useless-excludes

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
rev: v6.0.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
Expand All @@ -18,13 +18,13 @@ repos:
hooks:
- id: isort
- repo: https://github.com/python/black
rev: 25.1.0
rev: 25.9.0
hooks:
- id: black
args: ["--line-length=88"]

- repo: https://github.com/pycqa/flake8
rev: 7.1.2
rev: 7.3.0
hooks:
- id: flake8
additional_dependencies: ["flake8-bugbear"]
Expand Down
17 changes: 16 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,40 +43,50 @@ Before opening an issue, commenting, etc you must read and agree to the [Code of
🎗️ _**Please note, all repo support will be provided on weekdays, U.S. Pacific Timezone. The quickest means of support would be to join the Slack #website channel.**_

## Working on your Issue

- Comment on the issue directly if you have a question (feel free to follow it up with a Slack message).
- People are welcome to team up on an issue. If you see someone is already assigned but you want to help, leave the other assignee a message on the issue about collaborating.
- Please note any time senstive due dates or labels! Any amount of help is appreciated, but if the deadline approaches and you won't be able to complete it, please leave a comment about your progress and unassign yourself from the issue so someone else can pick it up. If you forked the repo, go ahead and make a pull request with what you have.

## Slack Communication

If you are in Techtonica's slack space, please communicate about website related work or requests in the #website channel. If you are not in the Techtonica slack community and would like to be added, after having completed [the volunteer form](https://docs.google.com/forms/d/e/1FAIpQLSeW0mo-Dpsig70374UEPvzexpas-31Ost_HsFwm0kjNOxtbtg/viewform?c=0&w=1), please kindly search your email for `You can join our Slack by clicking here` or send [email protected] an email.

## Application Automaton Work

- You can find the app-based or application automation files on the `mvp` branch
- Please point any of this related work to be merged back into `mvp` rather than `develop` branch, via your PR
- Please get clarification from program staff when in doubt or having related questions

## Best Practices

These best practices are very important when working on a development team. Having code reviews from a team means that there will potentially be multiple request for changes from several reviewers. It helps everyone in the code review to understand what has been addressed, iterated on, what remains outstanding, and even gives opportunity to provide any missing context to one another.

#### Communicate Proactively

If you're unsure about something, **ask questions** in the relevant GitHub Issue or discussion thread. It's always better to ask for clarification than to spend time building something that doesn't align with the project's goals.

#### GitHub Issues

- Leave a comment to request an issue for assignment.
- Communicate status updates about work on issue frequently throughout each sprint week.
- Communicate any blockers or work dependencies on the issue why ensuring that relevant stakeholders are aware.
- Communicate when their work is complete with reference to relevant PRs.

#### Learn from the Existing Code

Before writing new code, take a few minutes to explore the existing codebase. How are other components structured? What naming conventions are used for CSS classes? Following existing patterns helps maintain consistency across the project.

#### Keep Your Changes Focused

- A pull request should address **one issue at a time**. If you notice another bug or have an idea for a different improvement while working, finish your current task first, and then open a new issue for the other item. This makes your changes much easier and faster to review.
- Use small, logical commits with clear messages (e.g., `feat: Create new sponsor card component`, `style: Apply brand colors to tier buttons`).
- A great practice in larger projects is to think in terms of **components**. Treat the 'sponsor tier card' as a self-contained block. All of its styles—the header, the list, the button—should be scoped within its main class (`.sponsor-tier-card`). This prevents styles from 'leaking out' and affecting other parts of the site, and it makes the component much easier to maintain or reuse in the future.

#### Pull Request

When addressing requests for changes it is best practice to do so in a visible and tangible way. You can do this by:

- **Acknowleding** each request for change (i.e. feedback was marked with an emoji reaction to show its accepted).
- Provide a **written response** to the request for changes in one of the following ways:
1. summary comment addressing each individual request for change stating how and where (the commit hash referenced) you made the change
Expand All @@ -87,27 +97,32 @@ When addressing requests for changes it is best practice to do so in a visible a
- Assign yourself as the PR “Assignee”
- Request a staff, peer, and mentor reviewer
- The PR title should be descriptive enough to give an at a glance understanding of what you're working on
- Complete the PR template in its entirety: write a clear and descriptive title and body, explain *what* problem you're solving and *how* you've solved it, link the PR to the issue it resolves (e.g., "Closes #123").
- Complete the PR template in its entirety: write a clear and descriptive title and body, explain _what_ problem you're solving and _how_ you've solved it, link the PR to the issue it resolves (e.g., "Closes #123").
- If you have updated any styling, please include a full visual review of your updates in your pull request.

#### Embrace the Feedback Loop

- Code review is a collaborative process, not a critique of you as a person. Every developer, from junior to senior, receives feedback on their code. View it as a learning opportunity.
- When you receive feedback, respond to each comment (a simple "Done" or a thumbs-up emoji is often enough) and push your changes to the same branch to update the PR. Please don't close the PR and open a new one.

## Styling Best Practices

By scoping the CSS to the new components and using our existing design tokens (colors, fonts), we can ensure the page looks great without causing unintended side effects elsewhere.

#### 1. Remove Global Style Overrides

Universal selectors or global styles are too broad and are changing the look and feel of the entire website. They should be removed. The `*` (universal selector) and `body` styles are resetting margins, padding, and changing the default font and background color for every page on the site.

**Recommendation:** Please do not adjust the universal (`*`) and `body` style rules. Our site already has base styles defined, and adding new rules could override them, causing inconsistencies in fonts, colors, and layout across all pages.

#### 2. Scope Component-Specific Styles

New styles are great, but they need to be properly contained. While the new styles can be placed within the `style.scss` file, some existing class definitions like `.main-content`, `.row`, `.column`, and `.blue-background` can be unintentionally modified. These are utility classes used across the entire site. Modifying them affects every page that uses them.

**Recommendation:** To ensure your new styles only affect your specific component, please make sure all new style rules are nested inside the their component specific class. This will prevent them from accidentally affecting other elements on the site. You can also create a component specific style sheet if applicable.

#### 3. Use Existing Design System Variables

To maintain visual consistency, it's important to use the project's predefined variables for colors and fonts instead of hardcoding new values. Rather than introducing new styles introduce hardcoded color values (e.g., `#05556d`, `#f67625`, `#16c1f3`) and new font families (`'Segoe UI'`, `Lato`). The original `style.scss` uses variables like `$main-blue` and `$focal-orange` from an imported `_settings.scss` file.

**Recommendation:** Our project uses SCSS variables for colors to maintain a consistent theme. Instead of using hardcoded hex values, please use the corresponding variables from our `_settings.scss` file. For example, use `$focal-orange` for buttons instead of `#f67625`. Similarly, please use the site's existing font family instead of introducing `Lato` or `Segoe UI`.
Expand Down
2 changes: 0 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,6 @@ The Prettier pre-commit hook automatically formats code when you attempt to comm

1. **Scenario:**
During `git commit`, the Prettier pre-commit hook runs and identifies formatting issues.

- If applicable, Prettier will fix these issues but may leave **unstaged changes** in your working directory.

2. **Outcome:**
Expand All @@ -227,7 +226,6 @@ To avoid this behavior and streamline your workflow, you can install a Prettier
1. Install the Prettier plug-in in your IDE (e.g., VS Code).

2. Enable the "Format on Save" setting:

- Go to **Settings** > **Text Editor** > **Formatting** > Enable **Format on Save**.

3. Ensure your file is saved before running `git commit`.
Expand Down
46 changes: 33 additions & 13 deletions dates.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ def generate_application_timeline():

# Determine application status
app_open = app_open_datetime and (app_open_datetime <= today <= app_close_datetime)

# Flag to determine if applications are closed (past)
# app_closed = app_open_datetime and (today > app_close_datetime)

Expand Down Expand Up @@ -135,27 +135,46 @@ def generate_application_timeline():
cohort_start_day + timedelta(weeks=48) if cohort_start_day else None
)

# Text logic - only show application-specific text when applications are currently open
# Text logic - show app-specific text when applications are open
if app_open and app_close_datetime:
# Applications are currently open
main_text = f"Apply by {app_close_datetime.strftime('%B %d')} (12pm PT)!"
fulltime_top_button = "Apply Now!"
fulltime_bottom_button = f"Apply by {app_close_datetime.strftime('%B %d')} (12pm PT)!"

fulltime_bottom_button = (
f"Apply by {app_close_datetime.strftime('%B %d')} (12pm PT)!"
)

# URLs for buttons when applications are open
fulltime_top_button_url = "https://docs.google.com/forms/d/e/1FAIpQLSdk8nJUSuK_xoILyYyf3GIpVypQRtqsx9aQE7odHgX1cWvoHA/viewform"
fulltime_bottom_button_url = "https://docs.google.com/forms/d/e/1FAIpQLSdk8nJUSuK_xoILyYyf3GIpVypQRtqsx9aQE7odHgX1cWvoHA/viewform"
home_button_url = "render_swe_program_page" # This will be used with url_for in the template
fulltime_top_button_url = (
"https://docs.google.com/forms/d/e/"
"1FAIpQLSdk8nJUSuK_xoILyYyf3GIpVypQRtqsx9aQE7odHgX1cWvoHA/viewform"
)
fulltime_bottom_button_url = (
"https://docs.google.com/forms/d/e/"
"1FAIpQLSdk8nJUSuK_xoILyYyf3GIpVypQRtqsx9aQE7odHgX1cWvoHA/viewform"
)
home_button_url = (
"render_swe_program_page" # This will be used with url_for in the
# template
)
else:
# Applications are closed, not scheduled, or scheduled for the future
main_text = "Outsource your software work!"
fulltime_top_button = "Get notified about the next cohort!"
fulltime_bottom_button = "Sign up to join our events"

# URLs for buttons when applications are closed
fulltime_top_button_url = "https://docs.google.com/forms/d/e/1FAIpQLSfUdyIAfcU5KSqtYH5J5iPRgu-yycHdebnUKygQLEv-m7oVMw/viewform"
fulltime_bottom_button_url = "https://www.eventbrite.com/o/techtonica-11297022451"
home_button_url = "render_consulting_page" # This will be used with url_for in the template
fulltime_top_button_url = (
"https://docs.google.com/forms/d/e/"
"1FAIpQLSfUdyIAfcU5KSqtYH5J5iPRgu-yycHdebnUKygQLEv-m7oVMw/viewform"
)
fulltime_bottom_button_url = (
"https://www.eventbrite.com/o/techtonica-11297022451"
)
home_button_url = (
"render_consulting_page" # This will be used with url_for in the
# template
)

return {
"APP_OPEN_DATE": format_date(app_open_datetime),
Expand All @@ -178,11 +197,12 @@ def generate_application_timeline():
"JOB_SEARCH_START_MONTH_YEAR": format_month_year(training_end),
"JOB_SEARCH_END_MONTH_YEAR": format_month_year(job_search_end),
"APP_OPEN": app_open,
# "APP_CLOSED": app_closed, # not being used but present for potential future use
# "APP_CLOSED": app_closed, # Not used, but kept for potential future
# use
"TEXT": main_text,
"FULLTIME_TOP_BUTTON": fulltime_top_button,
"FULLTIME_BOTTOM_BUTTON": fulltime_bottom_button,
"FULLTIME_TOP_BUTTON_URL": fulltime_top_button_url,
"FULLTIME_BOTTOM_BUTTON_URL": fulltime_bottom_button_url,
"HOME_BUTTON_URL": home_button_url
"HOME_BUTTON_URL": home_button_url,
}
9 changes: 9 additions & 0 deletions static/css/style.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading