Skip to content

Commit 9bed9e9

Browse files
Merge pull request #167 from sergiocarracedo/feat/revamp
feat(site): revamp VigoTech website
2 parents cd9af82 + ac3529f commit 9bed9e9

414 files changed

Lines changed: 22404 additions & 14773 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/DESIGN.md

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# Design System Document: The Editorial Node
2+
3+
## 1. Overview & Creative North Star
4+
5+
This design system moves away from the "standard bootstrap" look of tech communities toward a high-end editorial experience.
6+
7+
**Creative North Star: "The Editorial Node"**
8+
Our vision is to treat community information as curated content rather than a database. We bridge the gap between technical precision and human-centric connection. The aesthetic utilizes intentional asymmetry, generous whitespace (derived from our `Spacing Scale`), and a sophisticated layering of surfaces to create a sense of digital "physicality." We don't just list events; we showcase a movement.
9+
10+
## 2. Colors & Surface Architecture
11+
12+
The palette is rooted in the high-energy `#e84a5f`, supported by a nuanced spectrum of architectural neutrals.
13+
14+
### The "No-Line" Rule
15+
16+
**Explicit Instruction:** You are prohibited from using 1px solid borders for sectioning or containment.
17+
Boundaries must be defined solely through:
18+
19+
- **Background Color Shifts:** A `surface-container-low` section sitting on a `surface` background.
20+
- **Tonal Transitions:** Using the `surface-container` tiers (Lowest to Highest) to define nesting.
21+
22+
### Surface Hierarchy & Nesting
23+
24+
Treat the UI as a series of stacked sheets of fine material.
25+
26+
- **The Base:** Use `surface` (#f1fbff) for the primary background.
27+
- **The Section:** Use `surface-container-low` (#eaf5fa) for large content areas.
28+
- **The Detail:** Use `surface-container-highest` (#e84a5f) for interactive elements like input fields or active state cards.
29+
30+
### The "Glass & Gradient" Rule
31+
32+
To elevate the experience, floating elements (Modals, Navigation Bars, Hovering Tooltips) should utilize **Glassmorphism**.
33+
34+
- **Backdrop Blur:** 12px to 20px.
35+
- **Fill:** A semi-transparent version of `surface` (e.g., 80% opacity).
36+
- **Signature Gradient:** For high-impact CTAs, use a subtle linear gradient from `primary` (#b11f3b) to `primary_container` (#d33b51) at a 135-degree angle. This adds "soul" to the technical interface.
37+
38+
## 3. Typography
39+
40+
The typography system balances the technical nature of developers with the premium feel of a lifestyle brand.
41+
42+
- **Display & Headlines (Space Grotesk):** This typeface offers a "technical-humanist" feel. Its geometric traps and expressive terminals convey innovation. Use `display-lg` for hero statements with tight letter-spacing (-0.02em).
43+
- **Body & Titles (Inter):** Chosen for its exceptional legibility and neutral tone. It provides the "clean" developer-friendly feel requested.
44+
- **Technical Details:** Where code snippets or technical metadata (e.g., repo sizes, timestamps) appear, use a monospace font-family at `label-sm` scale to provide a subtle "hacker" nod.
45+
46+
## 4. Elevation & Depth
47+
48+
Depth is achieved through **Tonal Layering** rather than structural shadows.
49+
50+
- **The Layering Principle:** Place a `surface-container-lowest` card on a `surface-container-low` section. This creates a soft, natural lift that feels like high-quality paper.
51+
- **Ambient Shadows:** If a floating effect is required (e.g., a "Join Us" button or a featured Event Card), use an extra-diffused shadow:
52+
- _Blur:_ 32px
53+
- _Spread:_ -4px
54+
- _Opacity:_ 6% of the `on_surface` color.
55+
- **The "Ghost Border" Fallback:** If accessibility demands a container edge, use a Ghost Border: `outline_variant` at **15% opacity**. Never 100%.
56+
57+
## 5. Components
58+
59+
### Buttons
60+
61+
- **Primary:** High-polish gradient (`primary` to `primary_container`). Large padding (Scale 3 on sides, 2 on top/bottom). `Roundedness: md`.
62+
- **Secondary:** No fill. `Ghost Border` (15% opacity `outline`). `on_surface` text.
63+
- **Tertiary:** No fill, no border. Underline only on hover.
64+
65+
### Community Group Cards
66+
67+
Forbid the use of divider lines.
68+
69+
- **Style:** A `surface-container-low` base that shifts to `surface-container-highest` on hover.
70+
- **Layout:** Use asymmetrical spacing—more padding at the top (Scale 6) than the bottom (Scale 4) to create an editorial "header" feel within the card.
71+
72+
### Filtered Video Library & Chips
73+
74+
- **Chips:** Use `secondary_container` with `on_secondary_container` text. When selected, use `primary` with `on_primary`.
75+
- **Video Cards:** Use a 16:9 aspect ratio for thumbnails. Overlay a glassmorphic "Play" button in the center. Metadata should use `body-sm` for the description and a monospace `label-sm` for the video duration.
76+
77+
### Input Fields & Search
78+
79+
- **Style:** Minimalist. No border. Use `surface-container-highest` as the fill.
80+
- **State:** On focus, the background remains, but a 2px `primary` underline animates from the center.
81+
82+
## 6. Do’s and Don’ts
83+
84+
### Do:
85+
86+
- **Embrace Whitespace:** If you think there is enough space, add one more step from the `Spacing Scale`. Space is a luxury.
87+
- **Nesting Surfaces:** Use the `surface-container` tiers to guide the eye. The darker/more saturated the container, the more "nested" it should feel.
88+
- **Intentional Asymmetry:** Align text to the left but allow imagery or decorative branding elements to "break" the grid and bleed off-screen.
89+
90+
### Don’t:
91+
92+
- **No Hard Outlines:** Never use a 100% opaque border to separate a sidebar or a card. It breaks the editorial flow.
93+
- **No Pure Black:** Even in Dark Mode, use the `surface` and `on_surface` tokens. Pure #000000 kills the "premium" depth.
94+
- **No Standard Shadows:** Avoid the "fuzzy grey" shadow. If you must use a shadow, tint it with the primary or surface color to keep it integrated with the environment.
95+
- **No Over-Crowding:** Don't try to fit 5 event cards in a row. Use 2 or 3 to allow the brand's personality to breathe.

.editorconfig

Lines changed: 0 additions & 13 deletions
This file was deleted.

.env.example

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
VIGOTECH_MEMBERS_SOURCE = '/vigotech.json'
2-
VIGOTECH_MEMBERS_SOURCE_FILE = 'static/vigotech.json'
3-
VIGOTECH_MEMBERS_SOURCE_GENERATED = '/vigotech-generated.json'
4-
VIGOTECH_MEMBERS_SOURCE_GENERATED_FILE = 'static/vigotech-generated.json'
5-
VIGOTECH_FRIENDS_SOURCE = '/friends.json'
6-
MEETUP_API_BASE = 'http://api.meetup.com'
7-
YOUTUBE_API_KEY = '[YOUR YOUTUBE API KEY HERE]'
8-
GA = '[YOUR GOOGLE ANALYTICS PROPERTY ID HERE]'
9-
EVENTBRITE_OAUTH_TOKEN = '[YOUR EVENTBRITE PERSONAL OAUTH TOKEN HERE]'
1+
VIGOTECH_MOCK_EVENTS=true
2+
PUBLIC_BASE_PATH=
3+
PUBLIC_NOINDEX=false
4+
EVENTBRITE_OAUTH_TOKEN=
5+
YOUTUBE_API_KEY=
6+
GOOGLE_CALENDAR_API_KEY=

.eslintrc.js

Lines changed: 0 additions & 22 deletions
This file was deleted.

.github/copilot-instructions.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Project Development Guidelines
2+
3+
## Testing Strategy
4+
5+
- Use Vitest for unit tests and Playwright for e2e tests.
6+
- Keep unit tests focused and small.
7+
- Maintain 95% coverage thresholds for lines, statements, functions, and branches.
8+
9+
## Folder Structure
10+
11+
- Keep source code in `src/`.
12+
- Place reusable components under `src/components/`.
13+
- Place e2e tests under `playwright/`.
14+
- Place test setup in `test/`.
15+
16+
## Code Organization
17+
18+
- Keep one component per file when adding components.
19+
- Prefer named exports for utilities and components.
20+
- Keep files focused on a single responsibility.
21+
22+
## Formatting
23+
24+
- No semicolons.
25+
- Single quotes for strings.
26+
- Double quotes for JSX attributes.
27+
- Trailing commas in multi-line arrays and objects.
28+
- 100 character line width.
29+
- Arrow functions always use parentheses.
30+
31+
## Linting
32+
33+
- Use `oxlint` with `.oxlintrc.json`.
34+
- Ensure linting passes before commit.
35+
36+
## Commit Convention
37+
38+
- Follow Conventional Commits.
39+
- Types: feat, fix, docs, style, refactor, test, chore.
40+
- Format: `type(scope): description`.

.github/workflows/deploy-pages.yml

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
name: Deploy Pages
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: write
11+
pages: write
12+
id-token: write
13+
14+
concurrency:
15+
group: pages
16+
cancel-in-progress: true
17+
18+
env:
19+
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
20+
PUBLIC_BASE_PATH: ${{ vars.PUBLIC_BASE_PATH }}
21+
PUBLIC_NOINDEX: ${{ vars.PUBLIC_NOINDEX || 'true' }}
22+
23+
jobs:
24+
refresh-data:
25+
if: github.actor != 'github-actions[bot]'
26+
permissions:
27+
contents: write
28+
runs-on: ubuntu-latest
29+
steps:
30+
- name: Checkout
31+
uses: actions/checkout@v4
32+
with:
33+
fetch-depth: 0
34+
35+
- name: Setup Node.js
36+
uses: actions/setup-node@v4
37+
with:
38+
node-version: '22'
39+
40+
- name: Setup pnpm
41+
uses: pnpm/action-setup@v4
42+
with:
43+
version: 10
44+
45+
- name: Get pnpm store directory
46+
id: pnpm-cache
47+
shell: bash
48+
run: echo "STORE_PATH=$(pnpm store path)" >> "$GITHUB_OUTPUT"
49+
50+
- name: Setup pnpm cache
51+
uses: actions/cache@v4
52+
with:
53+
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
54+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
55+
restore-keys: |
56+
${{ runner.os }}-pnpm-store-
57+
58+
- name: Install dependencies
59+
run: pnpm install --frozen-lockfile
60+
61+
- name: Generate vigotech data
62+
run: pnpm generate:data
63+
env:
64+
EVENTBRITE_OAUTH_TOKEN: ${{ secrets.EVENTBRITE_OAUTH_TOKEN }}
65+
YOUTUBE_API_KEY: ${{ secrets.YOUTUBE_API_KEY }}
66+
67+
- name: Sync Astro content types
68+
run: pnpm astro sync
69+
70+
- name: Format generated content
71+
run: pnpm format src/content/events src/content/videos
72+
73+
- name: Commit generated data
74+
run: |
75+
if git diff --quiet -- public/vigotech-generated.json src/content/videos src/content/events; then
76+
echo "No generated changes to commit"
77+
exit 0
78+
fi
79+
80+
git config user.name "github-actions[bot]"
81+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
82+
git add public/vigotech-generated.json src/content/videos src/content/events
83+
git commit -m "chore: refresh generated community history"
84+
git push
85+
86+
build:
87+
needs: refresh-data
88+
runs-on: ubuntu-latest
89+
steps:
90+
- name: Checkout
91+
uses: actions/checkout@v4
92+
93+
- name: Setup Node.js
94+
uses: actions/setup-node@v4
95+
with:
96+
node-version: '22'
97+
98+
- name: Setup pnpm
99+
uses: pnpm/action-setup@v4
100+
with:
101+
version: 10
102+
103+
- name: Get pnpm store directory
104+
id: pnpm-cache
105+
shell: bash
106+
run: echo "STORE_PATH=$(pnpm store path)" >> "$GITHUB_OUTPUT"
107+
108+
- name: Setup pnpm cache
109+
uses: actions/cache@v4
110+
with:
111+
path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
112+
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
113+
restore-keys: |
114+
${{ runner.os }}-pnpm-store-
115+
116+
- name: Install dependencies
117+
run: pnpm install --frozen-lockfile
118+
119+
- name: Generate vigotech data
120+
run: pnpm generate:data
121+
env:
122+
EVENTBRITE_OAUTH_TOKEN: ${{ secrets.EVENTBRITE_OAUTH_TOKEN }}
123+
YOUTUBE_API_KEY: ${{ secrets.YOUTUBE_API_KEY }}
124+
125+
- name: Build site
126+
run: pnpm build
127+
128+
- name: Upload Pages artifact
129+
uses: actions/upload-pages-artifact@v3
130+
with:
131+
path: ./dist
132+
133+
deploy:
134+
needs: build
135+
runs-on: ubuntu-latest
136+
environment:
137+
name: github-pages
138+
url: ${{ steps.deployment.outputs.page_url }}
139+
steps:
140+
- name: Deploy to GitHub Pages
141+
id: deployment
142+
uses: actions/deploy-pages@v4

.github/workflows/gh-pages.yml

Lines changed: 0 additions & 51 deletions
This file was deleted.

0 commit comments

Comments
 (0)