Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
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
30 changes: 30 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# EditorConfig: https://EditorConfig.org

root = true

[*]
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
charset = utf-8

[*.py]
indent_style = space
indent_size = 4
max_line_length = 88

[*.{js,jsx,ts,tsx}]
indent_style = space
indent_size = 2
max_line_length = 80

[*.{yml,yaml,json,css,styl}]
indent_style = space
indent_size = 2

[*.sass]
indent_style = space
indent_size = 4

[*.md]
trim_trailing_whitespace = false
1 change: 1 addition & 0 deletions .env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VITE_GA_ID=G-JE322K8EBK
1 change: 1 addition & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
VITE_GA_ID=G-XXXXXXXXXX
109 changes: 109 additions & 0 deletions .github/workflows/ci-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
name: Deploy static content to website-develop

on:
push:
branches:
- develop
pull_request:
branches:
- develop
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: 'pages-dev'
cancel-in-progress: true

jobs:
format:
name: JS Code Format
runs-on: ubuntu-latest
timeout-minutes: 3
steps:
- name: Checkout branch
uses: actions/checkout@v2
with:
path: pycon-website
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: '25.2'
- name: Install node dependencies
run: |
cd pycon-website/
npm ci
- name: Show node environment
run: |
node --version
npm --version
- name: Run JS lint
run: |
cd pycon-website/
npm run format:check

build:
name: Build
runs-on: ubuntu-latest
needs: format
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup nodeJS
uses: actions/setup-node@v4
with:
node-version: '25.2'
- name: Install dependencies
run: npm ci
- name: Build project
run: npm run build
- name: Upload dist folder as artifact
uses: actions/upload-artifact@v4
with:
name: dist-artifact
path: dist/

deploy:
if: github.event_name == 'push'
name: Deploy to Develop
runs-on: ubuntu-latest
needs: build
steps:
- name: Generate access token
if: always()
id: generate_access_token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.PYCON_CO_APP_ID }}
private-key: ${{ secrets.PYCON_CO_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
- name: Checkout target repository
uses: actions/checkout@v4
with:
repository: PyConColombia/website-develop
token: ${{ steps.generate_access_token.outputs.token }}
path: website-develop
- name: Download dist artifact
uses: actions/download-artifact@v4
with:
name: dist-artifact
path: dist
- name: Prepare deployment
run: |
find website-develop/ -mindepth 1 ! -name 'CNAME' ! -path "website-develop/.git*" -delete
mv dist/* website-develop/
- name: Commit and push changes
run: |
cd website-develop
git config user.name "github-actions"
git config user.email "github-actions@github.com"
if [[ -n "$(git status --porcelain)" ]]; then
git add .
git commit -m "Deploy: $(date +'%Y-%m-%d %H:%M:%S') to branch ${{ github.ref_name }}"
git push origin gh-pages
else
echo "No changes to commit. Skipping deployment."
fi
44 changes: 44 additions & 0 deletions .github/workflows/ci-prod.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
name: Deploy static content to website-2026

on:
push:
branches:
- main
workflow_dispatch:

permissions:
contents: read
pages: write
id-token: write

concurrency:
group: 'pages-prod'
cancel-in-progress: true

jobs:
deploy:
name: Deploy to Production
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 25.2
- name: Install dependencies
run: npm ci
- name: Build
run: npm run build
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: './dist'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
55 changes: 46 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,53 @@
# React + Vite
# website-2026

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
React + Vite project with HMR, ESLint, and Biome for formatting.

Currently, two official plugins are available:
## Prerequisites

- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react) uses [Babel](https://babeljs.io/) (or [oxc](https://oxc.rs) when used in [rolldown-vite](https://vite.dev/guide/rolldown)) for Fast Refresh
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh
- **Node.js** 18+ (recommended: current LTS)
- **npm** 9+ (or use the Node-bundled version)

## React Compiler
## Setup & run

The React Compiler is currently not compatible with SWC. See [this issue](https://github.com/vitejs/vite-plugin-react/issues/428) for tracking the progress.
### 1. Install dependencies

## Expanding the ESLint configuration
```bash
npm install
```

If you are developing a production application, we recommend using TypeScript with type-aware lint rules enabled. Check out the [TS template](https://github.com/vitejs/vite/tree/main/packages/create-vite/template-react-ts) for information on how to integrate TypeScript and [`typescript-eslint`](https://typescript-eslint.io) in your project.
### 2. Run the development server

```bash
npm run dev
```

Then open the URL shown in the terminal (usually `http://localhost:5173`).

### 3. Build for production

```bash
npm run build
```

Output is in the `dist/` folder.

### 4. Preview production build locally

```bash
npm run preview
```

## Other scripts

| Script | Description |
|-----------------|--------------------------------|
| `npm run format` | Format and fix with Biome |
| `npm run format:check`| Check formatting (no write) |

## Tech stack

- [React](https://react.dev/) 19
- [Vite](https://vite.dev/) 7
- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react-swc) for Fast Refresh
- [Biome](https://biomejs.dev/) for linting and formatting
- ESLint for additional lint rules
35 changes: 35 additions & 0 deletions biome.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
{
"$schema": "https://biomejs.dev/schemas/2.3.13/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
"useIgnoreFile": true
},
"files": {
"ignoreUnknown": false
},
"formatter": {
"enabled": true,
"indentStyle": "space",
"indentWidth": 2
},
"linter": {
"enabled": true,
"rules": {
"recommended": true
}
},
"javascript": {
"formatter": {
"quoteStyle": "double"
}
},
"assist": {
"enabled": true,
"actions": {
"source": {
"organizeImports": "on"
}
}
}
}
22 changes: 11 additions & 11 deletions eslint.config.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import js from '@eslint/js'
import globals from 'globals'
import reactHooks from 'eslint-plugin-react-hooks'
import reactRefresh from 'eslint-plugin-react-refresh'
import { defineConfig, globalIgnores } from 'eslint/config'
import js from "@eslint/js";
import { defineConfig, globalIgnores } from "eslint/config";
import reactHooks from "eslint-plugin-react-hooks";
import reactRefresh from "eslint-plugin-react-refresh";
import globals from "globals";

export default defineConfig([
globalIgnores(['dist']),
globalIgnores(["dist"]),
{
files: ['**/*.{js,jsx}'],
files: ["**/*.{js,jsx}"],
extends: [
js.configs.recommended,
reactHooks.configs.flat.recommended,
Expand All @@ -17,13 +17,13 @@ export default defineConfig([
ecmaVersion: 2020,
globals: globals.browser,
parserOptions: {
ecmaVersion: 'latest',
ecmaVersion: "latest",
ecmaFeatures: { jsx: true },
sourceType: 'module',
sourceType: "module",
},
},
rules: {
'no-unused-vars': ['error', { varsIgnorePattern: '^[A-Z_]' }],
"no-unused-vars": ["error", { varsIgnorePattern: "^[A-Z_]" }],
},
},
])
]);
8 changes: 7 additions & 1 deletion index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>website-2026</title>
<title>PyCon Colombia 2026</title>
<script>
var path = window.location.pathname;
if (!path.startsWith("/#") && !['/', ''].includes(path)) {
window.location.replace(`/#${path}`);
}
</script>
</head>
<body>
<div id="root"></div>
Expand Down
8 changes: 8 additions & 0 deletions jsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"compilerOptions": {
"paths": {
"@/*": ["./src/*"],
"@/node_modules/*": ["./node_modules/*"]
}
}
}
Loading