├── .babelrc ├── .browserslistrc ├── .editorconfig ├── .eslintrc.js ├── .github └── workflows │ ├── ci.yml │ └── dependabot-automerge.yml ├── .gitignore ├── .idea ├── vcs.xml └── workspace.xml ├── .npmrc ├── .nvmrc ├── .prettierignore ├── .vscode ├── extensions.json └── settings.json ├── LICENSE ├── README.md ├── TODO.md ├── config ├── webpack.dev.js └── webpack.prod.js ├── lighthouserc.yaml ├── netlify.toml ├── package-lock.json ├── package.json ├── postcss.config.js ├── prettier.config.js ├── src ├── assets │ ├── favicon.svg │ ├── favicon │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── browserconfig.xml │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── maskable_icon.png │ │ ├── mstile-144x144.png │ │ ├── mstile-150x150.png │ │ ├── mstile-310x150.png │ │ ├── mstile-310x310.png │ │ ├── mstile-70x70.png │ │ └── safari-pinned-tab.svg │ ├── images │ │ ├── biene_trencadis.svg │ │ ├── borders │ │ │ ├── basic.svg │ │ │ └── crown.svg │ │ ├── hackersatupc-logo-black.svg │ │ ├── hackersatupc-logo-white.svg │ │ ├── hackupc-logo-black.svg │ │ ├── hackupc-logo-white.svg │ │ ├── hackupc-name-trencadis.svg │ │ ├── icons │ │ │ ├── camera.svg │ │ │ ├── duck.svg │ │ │ ├── eye.svg │ │ │ ├── icon-cafeteria.svg │ │ │ ├── icon-cup-stacking.svg │ │ │ ├── icon-dodge.svg │ │ │ ├── icon-draw.svg │ │ │ ├── icon-duck.svg │ │ │ ├── icon-email-alt-2.svg │ │ │ ├── icon-email-alt.svg │ │ │ ├── icon-email-circle.svg │ │ │ ├── icon-email.svg │ │ │ ├── icon-facebook-circle.svg │ │ │ ├── icon-facebook.svg │ │ │ ├── icon-github-circle.svg │ │ │ ├── icon-github.svg │ │ │ ├── icon-info.svg │ │ │ ├── icon-instagram-circle.svg │ │ │ ├── icon-instagram.svg │ │ │ ├── icon-lego.svg │ │ │ ├── icon-linkedin-circle.svg │ │ │ ├── icon-linkedin.svg │ │ │ ├── icon-medium-alt.svg │ │ │ ├── icon-medium-circle-2.svg │ │ │ ├── icon-medium-circle.svg │ │ │ ├── icon-medium.svg │ │ │ ├── icon-nerf.svg │ │ │ ├── icon-rubik.svg │ │ │ ├── icon-slideshare.svg │ │ │ ├── icon-sticker.svg │ │ │ ├── icon-talk.svg │ │ │ ├── icon-twitch-circle.svg │ │ │ ├── icon-twitter-circle.svg │ │ │ ├── icon-twitter.svg │ │ │ ├── icon-youtube-circle.svg │ │ │ ├── icon-youtube.svg │ │ │ └── icon-zumba.svg │ │ ├── star-window.svg │ │ └── trencadis │ │ │ ├── beige.svg │ │ │ ├── black.svg │ │ │ ├── blue.svg │ │ │ ├── brown.svg │ │ │ ├── cyan.svg │ │ │ ├── green.svg │ │ │ ├── light.svg │ │ │ ├── lime.svg │ │ │ ├── orange.svg │ │ │ ├── very-light.svg │ │ │ └── white.svg │ ├── logos │ │ ├── ajuntament_de_barcelona.svg │ │ ├── artiach.png │ │ ├── aws.svg │ │ ├── aws_alt.svg │ │ ├── aws_educate.png │ │ ├── birba.png │ │ ├── bloomberg.svg │ │ ├── bsc.png │ │ ├── bunge.png │ │ ├── capchase.svg │ │ ├── cfis.png │ │ ├── cfis.svg │ │ ├── cfis_alt.svg │ │ ├── cfis_alt_2.svg │ │ ├── coca-cola.svg │ │ ├── coeinf-small-2x.png │ │ ├── coeinf-small.png │ │ ├── coeinf.png │ │ ├── conguitos.png │ │ ├── conguitos_4K.png │ │ ├── cuetara.png │ │ ├── digital_ocean.svg │ │ ├── dominos.png │ │ ├── dominos_2023.jpg │ │ ├── ecooltra.svg │ │ ├── everis.png │ │ ├── ey.svg │ │ ├── facebook.svg │ │ ├── fib.svg │ │ ├── floorfy.svg │ │ ├── frit_ravich.png │ │ ├── gallina_blanca.jpg │ │ ├── gallina_blanca.png │ │ ├── gallina_blanca.svg │ │ ├── gallina_blanca_alt.svg │ │ ├── github.svg │ │ ├── google.svg │ │ ├── hackupc_unrevealed.svg │ │ ├── happyscribe.svg │ │ ├── haribo.png │ │ ├── haribo_4K.png │ │ ├── haribo_alt_4K.png │ │ ├── haribo_letters.png │ │ ├── haribo_letters.svg │ │ ├── haribo_letters_4K.png │ │ ├── haufe.png │ │ ├── haufe.svg │ │ ├── haufe_alt.svg │ │ ├── hp.svg │ │ ├── hp_alt.svg │ │ ├── hp_black.svg │ │ ├── huawei.png │ │ ├── illy.svg │ │ ├── infojobs.svg │ │ ├── itequia.png │ │ ├── ithinkupc.svg │ │ ├── ithinkupc_white.svg │ │ ├── jetbrains.svg │ │ ├── leo_boeck.png │ │ ├── mckinsey_company.svg │ │ ├── mckinsey_company_alt.svg │ │ ├── microsoft.svg │ │ ├── midokura.png │ │ ├── midokura.svg │ │ ├── mlh.svg │ │ ├── moncafe.png │ │ ├── mundimoto.svg │ │ ├── nissin.png │ │ ├── opentrends.png │ │ ├── optiver.svg │ │ ├── pura-fruta-2022.jpg │ │ ├── pura_fruta.jpg │ │ ├── pura_fruta.png │ │ ├── pura_fruta_alt.png │ │ ├── red_bull.png │ │ ├── red_bull.svg │ │ ├── restbai.png │ │ ├── restbai.svg │ │ ├── servi_zurich.png │ │ ├── skyscanner.png │ │ ├── skyscanner.svg │ │ ├── skyscanner_alt.svg │ │ ├── sopra_steria.svg │ │ ├── stickermule.svg │ │ ├── strands.svg │ │ ├── tech.png │ │ ├── telecos-small-2x.png │ │ ├── telecos-small.png │ │ ├── telecos_4K.png │ │ ├── thoughtworks.svg │ │ ├── thoughtworks_pink.svg │ │ ├── twilio.svg │ │ ├── typeform.svg │ │ ├── typeform_white.svg │ │ ├── upc.svg │ │ ├── upc_50_anys-big.png │ │ ├── upc_50_anys.png │ │ ├── vueling.svg │ │ ├── wolfram.png │ │ └── zanuy.png │ └── ogimage.png ├── favicon │ ├── favicon-black.svg │ ├── favicon-color.svg │ ├── favicon-white.svg │ └── faviconDescription.json ├── index.html ├── index.ts ├── scripts │ ├── analytics.ts │ ├── cookies.ts │ ├── faq.ts │ ├── hero │ │ └── index.ts │ └── sw.ts └── styles │ ├── sections │ ├── about-us.scss │ ├── during.scss │ ├── faq.scss │ ├── follow-us.scss │ ├── footer.scss │ ├── hero.scss │ ├── hero │ │ └── hero.scss │ ├── live.scss │ ├── participate.scss │ ├── photos.scss │ ├── sponsors-and-partners.scss │ ├── sponsors │ │ └── logo-alignments.scss │ └── what-is-a-hackathon.scss │ ├── shared │ ├── body.scss │ ├── cookies.scss │ ├── fonts.scss │ ├── nav.scss │ └── tags.scss │ ├── style.scss │ └── variables.scss ├── stylelint.config.js └── tsconfig.json /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | [ 4 | "@babel/preset-env", 5 | { 6 | "useBuiltIns": "usage", 7 | "debug": true, 8 | "corejs": 3 9 | } 10 | ] 11 | ], 12 | "plugins": [], 13 | "$schema": "https://json.schemastore.org/babelrc" 14 | } 15 | -------------------------------------------------------------------------------- /.browserslistrc: -------------------------------------------------------------------------------- 1 | > 0.5% 2 | last 2 versions 3 | Firefox ESR 4 | not dead 5 | not IE 11 6 | not IE_Mob 11 7 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 2 8 | indent_style = space 9 | insert_final_newline = true 10 | max_line_length = 80 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | max_line_length = 0 15 | trim_trailing_whitespace = false -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import("eslint").Linter.Config} 3 | */ 4 | module.exports = { 5 | root: true, 6 | env: { 7 | browser: true, 8 | }, 9 | parser: '@typescript-eslint/parser', 10 | extends: [ 11 | 'eslint:recommended', 12 | 'plugin:@typescript-eslint/eslint-recommended', 13 | 'plugin:@typescript-eslint/recommended', 14 | 'plugin:prettier/recommended', 15 | ], 16 | parserOptions: { 17 | ecmaVersion: 2021, 18 | sourceType: 'module', 19 | }, 20 | plugins: ['@typescript-eslint', 'prettier'], 21 | rules: { 22 | 'prettier/prettier': 'error', 23 | 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 24 | 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', 25 | }, 26 | overrides: [ 27 | { 28 | files: ['*.js', '*.ts'], 29 | rules: { 30 | '@typescript-eslint/no-var-requires': 'off', 31 | }, 32 | env: { 33 | node: true, 34 | }, 35 | }, 36 | ], 37 | ignorePatterns: ['/dist/'], 38 | } 39 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: push 3 | jobs: 4 | build: 5 | name: Build 6 | runs-on: ubuntu-latest 7 | steps: 8 | - name: 🚚 Get latest code 9 | uses: actions/checkout@v2 10 | - name: 🎯 Read .nvmrc 11 | run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)" 12 | id: nvm 13 | - name: 🎯 Use Node.js (.nvmrc) 14 | uses: actions/setup-node@v1 15 | with: 16 | node-version: '${{ steps.nvm.outputs.NVMRC }}' 17 | - name: 🎁 Install dependencies 18 | run: npm ci 19 | - name: 👷🏽‍♂️ Build the site 20 | run: npm run dist 21 | - name: 💾 Store the build 22 | uses: actions/upload-artifact@v2 23 | with: 24 | name: dist 25 | path: dist 26 | lighthouseci: 27 | name: Lighthouse 28 | needs: build 29 | runs-on: ubuntu-latest 30 | steps: 31 | - name: 🚚 Get latest code 32 | uses: actions/checkout@v2 33 | with: 34 | ref: ${{ github.event.pull_request.head.sha }} 35 | - name: 🚚 Get the build 36 | uses: actions/download-artifact@v2 37 | with: 38 | name: dist 39 | path: dist 40 | - name: 🎯 Read .nvmrc 41 | run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)" 42 | id: nvm 43 | - name: 🎯 Use Node.js (.nvmrc) 44 | uses: actions/setup-node@v1 45 | with: 46 | node-version: '${{ steps.nvm.outputs.NVMRC }}' 47 | - name: 🎁 Install Lighthouse 48 | run: npm install -g @lhci/cli 49 | - name: 🔎 Run Lighthouse 50 | run: lhci autorun 51 | env: 52 | LHCI_GITHUB_APP_TOKEN: ${{ secrets.LHCI_GITHUB_APP_TOKEN }} 53 | lintfix: 54 | name: Lint and fix 55 | runs-on: ubuntu-latest 56 | strategy: 57 | matrix: 58 | command: ['lint:eslint', 'lint:stylelint', 'lint:prettier'] 59 | steps: 60 | - name: 🚚 Get latest code 61 | uses: actions/checkout@v2 62 | with: 63 | fetch-depth: 0 64 | - name: 🎯 Read .nvmrc 65 | run: echo "##[set-output name=NVMRC;]$(cat .nvmrc)" 66 | id: nvm 67 | - name: 🎯 Use Node.js (.nvmrc) 68 | uses: actions/setup-node@v1 69 | with: 70 | node-version: '${{ steps.nvm.outputs.NVMRC }}' 71 | - name: 🎁 Install dependencies 72 | run: npm ci 73 | - name: 🔦 Run ${{ matrix.command }} 74 | run: npm run ${{ matrix.command }} 75 | - name: 🍾 Commit & Push changes 76 | uses: actions-js/push@master 77 | with: 78 | message: 'chore: Auto-fix some lint errors' 79 | github_token: ${{ secrets.GITHUB_TOKEN }} 80 | branch: ${{ github.ref }} 81 | -------------------------------------------------------------------------------- /.github/workflows/dependabot-automerge.yml: -------------------------------------------------------------------------------- 1 | name: Dependabot auto-merge 2 | on: pull_request_target 3 | 4 | permissions: 5 | pull-requests: write 6 | contents: write 7 | 8 | jobs: 9 | dependabot: 10 | runs-on: ubuntu-latest 11 | if: ${{ github.actor == 'dependabot[bot]' }} 12 | steps: 13 | - name: Enable auto-merge for Dependabot PRs 14 | run: gh pr merge --auto --merge "$PR_URL" 15 | env: 16 | PR_URL: ${{github.event.pull_request.html_url}} 17 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # production 3 | /build 4 | /dist 5 | 6 | # Created by https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux 7 | # Edit at https://www.toptal.com/developers/gitignore?templates=node,windows,macos,linux 8 | 9 | ### Linux ### 10 | *~ 11 | 12 | # temporary files which can be created if a process still has a handle open of a deleted file 13 | .fuse_hidden* 14 | 15 | # KDE directory preferences 16 | .directory 17 | 18 | # Linux trash folder which might appear on any partition or disk 19 | .Trash-* 20 | 21 | # .nfs files are created when an open file is removed but is still being accessed 22 | .nfs* 23 | 24 | ### macOS ### 25 | # General 26 | .DS_Store 27 | .AppleDouble 28 | .LSOverride 29 | 30 | # Icon must end with two \r 31 | Icon 32 | 33 | 34 | # Thumbnails 35 | ._* 36 | 37 | # Files that might appear in the root of a volume 38 | .DocumentRevisions-V100 39 | .fseventsd 40 | .Spotlight-V100 41 | .TemporaryItems 42 | .Trashes 43 | .VolumeIcon.icns 44 | .com.apple.timemachine.donotpresent 45 | 46 | # Directories potentially created on remote AFP share 47 | .AppleDB 48 | .AppleDesktop 49 | Network Trash Folder 50 | Temporary Items 51 | .apdisk 52 | 53 | ### Node ### 54 | # Logs 55 | logs 56 | *.log 57 | npm-debug.log* 58 | yarn-debug.log* 59 | yarn-error.log* 60 | lerna-debug.log* 61 | 62 | # Diagnostic reports (https://nodejs.org/api/report.html) 63 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 64 | 65 | # Runtime data 66 | pids 67 | *.pid 68 | *.seed 69 | *.pid.lock 70 | 71 | # Directory for instrumented libs generated by jscoverage/JSCover 72 | lib-cov 73 | 74 | # Coverage directory used by tools like istanbul 75 | coverage 76 | *.lcov 77 | 78 | # nyc test coverage 79 | .nyc_output 80 | 81 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 82 | .grunt 83 | 84 | # Bower dependency directory (https://bower.io/) 85 | bower_components 86 | 87 | # node-waf configuration 88 | .lock-wscript 89 | 90 | # Compiled binary addons (https://nodejs.org/api/addons.html) 91 | build/Release 92 | 93 | # Dependency directories 94 | node_modules/ 95 | jspm_packages/ 96 | 97 | # TypeScript v1 declaration files 98 | typings/ 99 | 100 | # TypeScript cache 101 | *.tsbuildinfo 102 | 103 | # Optional npm cache directory 104 | .npm 105 | 106 | # Optional eslint cache 107 | .eslintcache 108 | 109 | # Optional stylelint cache 110 | .stylelintcache 111 | 112 | # Microbundle cache 113 | .rpt2_cache/ 114 | .rts2_cache_cjs/ 115 | .rts2_cache_es/ 116 | .rts2_cache_umd/ 117 | 118 | # Optional REPL history 119 | .node_repl_history 120 | 121 | # Output of 'npm pack' 122 | *.tgz 123 | 124 | # Yarn Integrity file 125 | .yarn-integrity 126 | 127 | # dotenv environment variables file 128 | .env 129 | .env.test 130 | .env*.local 131 | 132 | # parcel-bundler cache (https://parceljs.org/) 133 | .cache 134 | .parcel-cache 135 | 136 | # Next.js build output 137 | .next 138 | 139 | # Nuxt.js build / generate output 140 | .nuxt 141 | dist 142 | 143 | # Gatsby files 144 | .cache/ 145 | # Comment in the public line in if your project uses Gatsby and not Next.js 146 | # https://nextjs.org/blog/next-9-1#public-directory-support 147 | # public 148 | 149 | # vuepress build output 150 | .vuepress/dist 151 | 152 | # Serverless directories 153 | .serverless/ 154 | 155 | # FuseBox cache 156 | .fusebox/ 157 | 158 | # DynamoDB Local files 159 | .dynamodb/ 160 | 161 | # TernJS port file 162 | .tern-port 163 | 164 | # Stores VSCode versions used for testing VSCode extensions 165 | .vscode-test 166 | 167 | ### Windows ### 168 | # Windows thumbnail cache files 169 | Thumbs.db 170 | Thumbs.db:encryptable 171 | ehthumbs.db 172 | ehthumbs_vista.db 173 | 174 | # Dump file 175 | *.stackdump 176 | 177 | # Folder config file 178 | [Dd]esktop.ini 179 | 180 | # Recycle Bin used on file shares 181 | $RECYCLE.BIN/ 182 | 183 | # Windows Installer files 184 | *.cab 185 | *.msi 186 | *.msix 187 | *.msm 188 | *.msp 189 | 190 | # Windows shortcuts 191 | *.lnk 192 | 193 | # End of https://www.toptal.com/developers/gitignore/api/node,windows,macos,linux 194 | 195 | .idea/ 196 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 1639556280669 37 | 45 | 46 | 47 | 48 | 50 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | save-exact=true 2 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | node_modules/ 3 | package-lock.json 4 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "dbaeumer.vscode-eslint", 4 | "stylelint.vscode-stylelint", 5 | "davidanson.vscode-markdownlint", 6 | "eg2.vscode-npm-script", 7 | "webhint.vscode-webhint", 8 | "sissel.json-script-tag", 9 | "esbenp.prettier-vscode", 10 | "znck.grammarly", 11 | "redhat.vscode-yaml", 12 | "arcanis.vscode-zipfs" 13 | ] 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.autoSave": "onFocusChange", 3 | "editor.formatOnSave": true, 4 | "editor.formatOnPaste": true, 5 | "editor.defaultFormatter": "esbenp.prettier-vscode", 6 | "editor.tabSize": 2, 7 | "git.autofetch": true, 8 | "css.validate": false, 9 | "scss.validate": false, 10 | "stylelint.enable": true, 11 | "editor.codeActionsOnSave": { 12 | "source.fixAll.eslint": true, 13 | "source.fixAll.stylelint": true 14 | }, 15 | "typescript.enablePromptUseWorkspaceTsdk": true, 16 | "files.exclude": {} 17 | } 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Hackers at UPC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HackUPC landing page 2 | 3 | [![Netlify Status](https://api.netlify.com/api/v1/badges/bb959f3f-1a5f-479e-80ec-d1f0c2ace501/deploy-status)](https://app.netlify.com/sites/hackupc/deploys) 4 | [![CI](https://github.com/hackupc/hackupc-landing/actions/workflows/ci.yml/badge.svg?branch=main)](https://github.com/hackupc/hackupc-landing/actions/workflows/ci.yml) 5 | 6 | ![HackUPC landing preview](src/assets/ogimage.png) 7 | 8 | Hi! This is the code of the HackUPC landing page. 9 | 10 | ## Develop 11 | 12 | Clone the repo, install [nvm](https://github.com/nvm-sh/nvm#installing-and-updating), install [Node.js](https://nodejs.org/en/download/) with nvm, and install the dependencies with npm the **first time**: 13 | 14 | ```sh 15 | git clone git@github.com:hackupc/hackupc-landing.git 16 | cd hackupc-landing 17 | 18 | # Install nvm 19 | # Copy the command from here: https://github.com/nvm-sh/nvm#installing-and-updating 20 | 21 | nvm install 22 | nvm use 23 | 24 | npm install 25 | ``` 26 | 27 | Use `npm run start` to compile and serve the build directory in real-time. It reloads every time there's a change. Then view the website at [https://localhost:3000](https://localhost:3000) 28 | 29 | ```sh 30 | npm run start 31 | ``` 32 | 33 | Whenever you want, fix auto-fixable lint errors and format files: 34 | 35 | ```sh 36 | npm run lint:eslint 37 | npm run lint:stylelint 38 | npm run lint:prettier 39 | ``` 40 | 41 | ### Tips 42 | 43 | - **Use `VS code`**, there's the `.vscode` folder with a good workspace configuration. It will be applied automatically. 44 | - Install `ESlint` and `Prettier` extensions. 45 | 46 | > If you're unfamiliar with modern vanilla websites, check [this video from CodelyTV](https://youtu.be/ZMBh6n3KWhY) (in Spanish) to understand the reasoning and benefits of this kind of architectures. 47 | 48 | ## Deploy 49 | 50 | **Push to master**. [Netlify](https://app.netlify.com/sites/hackupc) will build and deploy automatically. 51 | 52 | If you push something that doesn't build, don't worry, it won't be published. 53 | 54 | ## Support 55 | 56 | If you need help understanding something about this repo you can ask the previous developers. The ones that made the 2021 edition are: 57 | 58 | - Maurici Abad Gutierrez: Slack `@mauri` [mauriciabad.com](https://mauriciabad.com/) 59 | 60 | ## License 61 | 62 | MIT © Hackers@UPC 63 | -------------------------------------------------------------------------------- /TODO.md: -------------------------------------------------------------------------------- 1 | # To do list 2 | 3 | ## For each edition 4 | 5 | - [x] Refactor all 20XX for 20XX +1 and any outdated content 6 | - [x] Update `favicon` (color) 7 | - [x] Make the applcations closed page 8 | - [x] Make the subscrive page 9 | - [x] Update FAQ 10 | - [x] Put the new logos 11 | - [x] Make sure that github continous integration accepts the commits 12 | - [x] Update directors names' in the legal pages 13 | 14 | ## List 15 | 16 | - [ ] Do navbar 17 | - [ ] Do through the years 18 | - [ ] Do out association acording to the meeting 19 | 20 | ## Other 21 | 22 | - [ ] fix hero 23 | - [ ] stylelint not working 24 | -------------------------------------------------------------------------------- /config/webpack.dev.js: -------------------------------------------------------------------------------- 1 | const path = require('path') 2 | const HtmlWebpackPlugin = require('html-webpack-plugin') 3 | const { CleanWebpackPlugin } = require('clean-webpack-plugin') 4 | 5 | /** 6 | * @type {import('webpack').Configuration} 7 | */ 8 | module.exports = { 9 | entry: { 10 | main: './src/index.ts', 11 | }, 12 | output: { 13 | path: path.resolve('dist'), 14 | publicPath: '/', 15 | filename: '[name].bundle.js', 16 | }, 17 | mode: 'development', 18 | devServer: { 19 | static: path.resolve('dist'), 20 | compress: true, 21 | port: 3000, 22 | // Uncomment the two lines below to enable hot reload on mobile 23 | // host: '172.17.197.80', // Your ip, update it. This is mine. 24 | // disableHostCheck: true, 25 | // http2: true, 26 | }, 27 | devtool: 'eval-cheap-module-source-map', 28 | module: { 29 | rules: [ 30 | { 31 | test: /\.tsx?$/, 32 | use: 'ts-loader', 33 | exclude: /node_modules/, 34 | }, 35 | { 36 | test: /\.js$/, 37 | exclude: /node_modules/, 38 | use: { 39 | loader: 'babel-loader', 40 | }, 41 | }, 42 | { 43 | test: /\.(sa|sc|c)ss$/, 44 | exclude: /node_modules/, 45 | use: [ 46 | 'style-loader', // creates style nodes from JS strings 47 | 'css-loader', // translates CSS into CommonJS 48 | { 49 | loader: 'postcss-loader', // Loader for webpack to process CSS with PostCSS 50 | options: { 51 | postcssOptions: { 52 | plugins: [ 53 | require('stylelint')(), 54 | require('postcss-reporter')({ clearReportedMessages: true }), 55 | ], 56 | }, 57 | }, 58 | }, 59 | 'sass-loader', // compiles Sass to CSS, using Node Sass by default 60 | ], 61 | }, 62 | { 63 | test: /node_modules.*\.css$/, 64 | use: ['style-loader', 'css-loader'], 65 | }, 66 | { 67 | test: /\.(png|svg|jpg|jpeg|gif)$/, 68 | type: 'asset/resource', 69 | }, 70 | { 71 | test: /\.(woff|woff2|eot|ttf|otf)$/, 72 | type: 'asset/resource', 73 | }, 74 | { 75 | test: /(favicon\.ico|ogimage\.png)$/, 76 | type: 'asset/resource', 77 | generator: { 78 | filename: '[name][ext]', 79 | }, 80 | }, 81 | { 82 | test: /(hackupc-logo-black\.svg)$/, 83 | type: 'asset/resource', 84 | generator: { 85 | filename: 'hackupc-logo[ext]', 86 | }, 87 | }, 88 | { 89 | test: /\.html$/, 90 | use: [ 91 | { 92 | loader: 'html-loader', 93 | options: { 94 | sources: true, 95 | minimize: { 96 | collapseWhitespace: true, 97 | removeComments: true, 98 | removeRedundantAttributes: true, 99 | removeScriptTypeAttributes: true, 100 | removeStyleLinkTypeAttributes: true, 101 | useShortDoctype: true, 102 | ignoreCustomComments: [/^!/, /^\s*#/, /google(on|off)/i], 103 | minifyCSS: true, 104 | minifyJS: true, 105 | }, 106 | }, 107 | }, 108 | ], 109 | }, 110 | ], 111 | }, 112 | resolve: { 113 | extensions: ['.wasm', '.mjs', '.ts', '.js', '.json'], 114 | }, 115 | plugins: [ 116 | new CleanWebpackPlugin(), 117 | new HtmlWebpackPlugin({ 118 | template: './src/index.html', 119 | filename: 'index.html', 120 | }), 121 | ], 122 | } 123 | -------------------------------------------------------------------------------- /lighthouserc.yaml: -------------------------------------------------------------------------------- 1 | ci: 2 | preset: lighthouse:all 3 | upload: 4 | target: temporary-public-storage 5 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "dist" 3 | command = "npm run dist" 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hackupc-landing", 3 | "version": "3.1.0", 4 | "description": "HackUPC landing page", 5 | "author": "Hackers@UPC", 6 | "license": "MIT", 7 | "homepage": "https://hackupc.com", 8 | "repository": "github:hackupc/hackupc-landing", 9 | "scripts": { 10 | "start": "webpack serve --config config/webpack.dev.js --open --progress", 11 | "dist": "webpack --config config/webpack.prod.js", 12 | "lint:eslint": "eslint . --ext .js,.ts --fix", 13 | "lint:stylelint": "stylelint --fix 'src/**/*.{scss,sass,css}'", 14 | "lint:prettier": "prettier . --write" 15 | }, 16 | "devDependencies": { 17 | "@babel/core": "7.20.12", 18 | "@babel/preset-env": "7.20.2", 19 | "@types/eslint": "8.4.10", 20 | "@types/gtag.js": "0.0.12", 21 | "@types/node": "18.11.18", 22 | "@types/prettier": "2.7.2", 23 | "@types/stylelint": "14.0.0", 24 | "@types/webfontloader": "1.6.35", 25 | "@types/webpack": "5.28.0", 26 | "@typescript-eslint/eslint-plugin": "5.48.2", 27 | "@typescript-eslint/parser": "5.48.2", 28 | "babel-loader": "9.1.2", 29 | "clean-webpack-plugin": "4.0.0", 30 | "compression-webpack-plugin": "10.0.0", 31 | "css-loader": "6.7.3", 32 | "css-minimizer-webpack-plugin": "4.2.2", 33 | "eslint": "8.32.0", 34 | "eslint-config-prettier": "8.6.0", 35 | "eslint-plugin-prettier": "4.2.1", 36 | "glob": "8.1.0", 37 | "html-loader": "4.2.0", 38 | "html-webpack-plugin": "5.5.0", 39 | "husky": "8.0.3", 40 | "lint-staged": "13.1.0", 41 | "mini-css-extract-plugin": "2.7.2", 42 | "postcss": "8.4.21", 43 | "postcss-easing-gradients": "3.0.1", 44 | "postcss-focus-visible": "7.1.0", 45 | "postcss-loader": "7.0.2", 46 | "postcss-preset-env": "7.8.3", 47 | "postcss-reporter": "7.0.5", 48 | "prettier": "2.8.3", 49 | "prettier-config-standard": "5.0.0", 50 | "purgecss-webpack-plugin": "5.0.0", 51 | "sass": "1.57.1", 52 | "sass-loader": "13.2.0", 53 | "style-loader": "3.3.1", 54 | "stylelint": "14.16.1", 55 | "stylelint-config-idiomatic-order": "9.0.0", 56 | "stylelint-config-prettier": "9.0.4", 57 | "stylelint-config-sass-guidelines": "9.0.1", 58 | "stylelint-config-standard": "29.0.0", 59 | "stylelint-order": "6.0.1", 60 | "stylelint-scss": "4.3.0", 61 | "terser-webpack-plugin": "5.3.6", 62 | "ts-loader": "9.4.2", 63 | "typescript": "4.9.4", 64 | "webpack": "5.75.0", 65 | "webpack-cli": "5.0.1", 66 | "webpack-dev-server": "4.11.1", 67 | "webpack-pwa-manifest": "4.3.0", 68 | "workbox-webpack-plugin": "6.5.4" 69 | }, 70 | "dependencies": { 71 | "@babel/polyfill": "7.12.1", 72 | "@fontsource/montserrat": "4.5.14", 73 | "core-js": "3.27.2", 74 | "focus-visible": "5.2.0", 75 | "lax.js": "2.0.3", 76 | "normalize.css": "8.0.1" 77 | }, 78 | "husky": { 79 | "hooks": { 80 | "pre-commit": "lint-staged" 81 | } 82 | }, 83 | "lint-staged": { 84 | "*.{js,ts}": "eslint --cache --fix", 85 | "*.{scss,sass,css}": "stylelint --cache --fix", 86 | "**/*": "prettier --write --ignore-unknown" 87 | }, 88 | "$schema": "https://json.schemastore.org/package" 89 | } 90 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [ 3 | require('postcss-easing-gradients'), 4 | require('postcss-focus-visible')(), 5 | require('postcss-preset-env')(), 6 | ], 7 | } 8 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import("prettier").Options} 3 | */ 4 | module.exports = { 5 | // ...require('prettier-config-standard'), 6 | 7 | trailingComma: 'es5', 8 | tabWidth: 2, 9 | semi: false, 10 | singleQuote: true, 11 | overrides: [ 12 | { 13 | files: 'src/**/*.html', 14 | options: { 15 | printWidth: 120, 16 | }, 17 | }, 18 | ], 19 | } 20 | -------------------------------------------------------------------------------- /src/assets/favicon.svg: -------------------------------------------------------------------------------- 1 | 8 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/assets/favicon/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/android-chrome-192x192.png -------------------------------------------------------------------------------- /src/assets/favicon/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/android-chrome-512x512.png -------------------------------------------------------------------------------- /src/assets/favicon/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/apple-touch-icon.png -------------------------------------------------------------------------------- /src/assets/favicon/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | #BEB771 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/favicon/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/favicon-16x16.png -------------------------------------------------------------------------------- /src/assets/favicon/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/favicon-32x32.png -------------------------------------------------------------------------------- /src/assets/favicon/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/favicon.ico -------------------------------------------------------------------------------- /src/assets/favicon/maskable_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/maskable_icon.png -------------------------------------------------------------------------------- /src/assets/favicon/mstile-144x144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/mstile-144x144.png -------------------------------------------------------------------------------- /src/assets/favicon/mstile-150x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/mstile-150x150.png -------------------------------------------------------------------------------- /src/assets/favicon/mstile-310x150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/mstile-310x150.png -------------------------------------------------------------------------------- /src/assets/favicon/mstile-310x310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/mstile-310x310.png -------------------------------------------------------------------------------- /src/assets/favicon/mstile-70x70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/favicon/mstile-70x70.png -------------------------------------------------------------------------------- /src/assets/images/hackupc-logo-black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/images/hackupc-logo-white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/images/icons/camera.svg: -------------------------------------------------------------------------------- 1 | camera -------------------------------------------------------------------------------- /src/assets/images/icons/duck.svg: -------------------------------------------------------------------------------- 1 | duck -------------------------------------------------------------------------------- /src/assets/images/icons/eye.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-cafeteria.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-cup-stacking.svg: -------------------------------------------------------------------------------- 1 | cups -------------------------------------------------------------------------------- /src/assets/images/icons/icon-dodge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-draw.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-duck.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-email-alt-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-email-alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-email-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-email.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-facebook-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-github-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-info.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-instagram-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-instagram.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-lego.svg: -------------------------------------------------------------------------------- 1 | lego -------------------------------------------------------------------------------- /src/assets/images/icons/icon-linkedin-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-linkedin.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-medium-alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-medium-circle-2.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-medium-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-medium.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-nerf.svg: -------------------------------------------------------------------------------- 1 | nerf -------------------------------------------------------------------------------- /src/assets/images/icons/icon-rubik.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-slideshare.svg: -------------------------------------------------------------------------------- 1 | slideshare -------------------------------------------------------------------------------- /src/assets/images/icons/icon-sticker.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-talk.svg: -------------------------------------------------------------------------------- 1 | talks -------------------------------------------------------------------------------- /src/assets/images/icons/icon-twitch-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-twitter-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-twitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-youtube-circle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/images/icons/icon-zumba.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/artiach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/artiach.png -------------------------------------------------------------------------------- /src/assets/logos/aws_alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/aws_educate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/aws_educate.png -------------------------------------------------------------------------------- /src/assets/logos/birba.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/birba.png -------------------------------------------------------------------------------- /src/assets/logos/bloomberg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/bsc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/bsc.png -------------------------------------------------------------------------------- /src/assets/logos/bunge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/bunge.png -------------------------------------------------------------------------------- /src/assets/logos/cfis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/cfis.png -------------------------------------------------------------------------------- /src/assets/logos/cfis.svg: -------------------------------------------------------------------------------- 1 | Recurso 2 -------------------------------------------------------------------------------- /src/assets/logos/cfis_alt.svg: -------------------------------------------------------------------------------- 1 | Recurso 1 -------------------------------------------------------------------------------- /src/assets/logos/cfis_alt_2.svg: -------------------------------------------------------------------------------- 1 | Recurso 2 -------------------------------------------------------------------------------- /src/assets/logos/coeinf-small-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/coeinf-small-2x.png -------------------------------------------------------------------------------- /src/assets/logos/coeinf-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/coeinf-small.png -------------------------------------------------------------------------------- /src/assets/logos/coeinf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/coeinf.png -------------------------------------------------------------------------------- /src/assets/logos/conguitos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/conguitos.png -------------------------------------------------------------------------------- /src/assets/logos/conguitos_4K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/conguitos_4K.png -------------------------------------------------------------------------------- /src/assets/logos/cuetara.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/cuetara.png -------------------------------------------------------------------------------- /src/assets/logos/dominos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/dominos.png -------------------------------------------------------------------------------- /src/assets/logos/dominos_2023.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/dominos_2023.jpg -------------------------------------------------------------------------------- /src/assets/logos/everis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/everis.png -------------------------------------------------------------------------------- /src/assets/logos/ey.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/facebook.svg: -------------------------------------------------------------------------------- 1 | facebook-logoCreated with Sketch. -------------------------------------------------------------------------------- /src/assets/logos/fib.svg: -------------------------------------------------------------------------------- 1 | Recurso 2 -------------------------------------------------------------------------------- /src/assets/logos/frit_ravich.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/frit_ravich.png -------------------------------------------------------------------------------- /src/assets/logos/gallina_blanca.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/gallina_blanca.jpg -------------------------------------------------------------------------------- /src/assets/logos/gallina_blanca.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/gallina_blanca.png -------------------------------------------------------------------------------- /src/assets/logos/github.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/google.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/assets/logos/hackupc_unrevealed.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/assets/logos/haribo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/haribo.png -------------------------------------------------------------------------------- /src/assets/logos/haribo_4K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/haribo_4K.png -------------------------------------------------------------------------------- /src/assets/logos/haribo_alt_4K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/haribo_alt_4K.png -------------------------------------------------------------------------------- /src/assets/logos/haribo_letters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/haribo_letters.png -------------------------------------------------------------------------------- /src/assets/logos/haribo_letters_4K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/haribo_letters_4K.png -------------------------------------------------------------------------------- /src/assets/logos/haufe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/haufe.png -------------------------------------------------------------------------------- /src/assets/logos/haufe.svg: -------------------------------------------------------------------------------- 1 | 16132_LO_Haufe_Group_RGB_pos_en -------------------------------------------------------------------------------- /src/assets/logos/haufe_alt.svg: -------------------------------------------------------------------------------- 1 | haufe_alt -------------------------------------------------------------------------------- /src/assets/logos/hp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/hp_alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/hp_black.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/huawei.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/huawei.png -------------------------------------------------------------------------------- /src/assets/logos/infojobs.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 8 | 9 | 10 | 12 | 16 | 19 | 23 | 27 | 32 | 38 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /src/assets/logos/itequia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/itequia.png -------------------------------------------------------------------------------- /src/assets/logos/ithinkupc_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/assets/logos/jetbrains.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/assets/logos/leo_boeck.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/leo_boeck.png -------------------------------------------------------------------------------- /src/assets/logos/microsoft.svg: -------------------------------------------------------------------------------- 1 | Microsoft logo -------------------------------------------------------------------------------- /src/assets/logos/midokura.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/midokura.png -------------------------------------------------------------------------------- /src/assets/logos/moncafe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/moncafe.png -------------------------------------------------------------------------------- /src/assets/logos/nissin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/nissin.png -------------------------------------------------------------------------------- /src/assets/logos/opentrends.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/opentrends.png -------------------------------------------------------------------------------- /src/assets/logos/pura-fruta-2022.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/pura-fruta-2022.jpg -------------------------------------------------------------------------------- /src/assets/logos/pura_fruta.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/pura_fruta.jpg -------------------------------------------------------------------------------- /src/assets/logos/pura_fruta.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/pura_fruta.png -------------------------------------------------------------------------------- /src/assets/logos/pura_fruta_alt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/pura_fruta_alt.png -------------------------------------------------------------------------------- /src/assets/logos/red_bull.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/red_bull.png -------------------------------------------------------------------------------- /src/assets/logos/restbai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/restbai.png -------------------------------------------------------------------------------- /src/assets/logos/servi_zurich.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/servi_zurich.png -------------------------------------------------------------------------------- /src/assets/logos/skyscanner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/skyscanner.png -------------------------------------------------------------------------------- /src/assets/logos/sopra_steria.svg: -------------------------------------------------------------------------------- 1 | logo -------------------------------------------------------------------------------- /src/assets/logos/tech.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/tech.png -------------------------------------------------------------------------------- /src/assets/logos/telecos-small-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/telecos-small-2x.png -------------------------------------------------------------------------------- /src/assets/logos/telecos-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/telecos-small.png -------------------------------------------------------------------------------- /src/assets/logos/telecos_4K.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/telecos_4K.png -------------------------------------------------------------------------------- /src/assets/logos/thoughtworks.svg: -------------------------------------------------------------------------------- 1 | logo -------------------------------------------------------------------------------- /src/assets/logos/thoughtworks_pink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /src/assets/logos/twilio.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /src/assets/logos/typeform.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/logos/typeform_white.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /src/assets/logos/upc_50_anys-big.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/upc_50_anys-big.png -------------------------------------------------------------------------------- /src/assets/logos/upc_50_anys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/upc_50_anys.png -------------------------------------------------------------------------------- /src/assets/logos/vueling.svg: -------------------------------------------------------------------------------- 1 | Recurso 1 -------------------------------------------------------------------------------- /src/assets/logos/wolfram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/wolfram.png -------------------------------------------------------------------------------- /src/assets/logos/zanuy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/logos/zanuy.png -------------------------------------------------------------------------------- /src/assets/ogimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/assets/ogimage.png -------------------------------------------------------------------------------- /src/favicon/favicon-black.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/favicon/favicon-color.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/favicon/faviconDescription.json: -------------------------------------------------------------------------------- 1 | { 2 | "masterPicture": "src/assets/favicon/favicon-black.svg", 3 | "iconsPath": "/assets/favicon/", 4 | "design": { 5 | "ios": { 6 | "masterPicture": { 7 | "type": "path", 8 | "content": "src/assets/favicon/favicon-white.svg" 9 | }, 10 | "pictureAspect": "backgroundAndMargin", 11 | "backgroundColor": "#1f143a", 12 | "margin": "14%", 13 | "assets": { 14 | "ios6AndPriorIcons": false, 15 | "ios7AndLaterIcons": false, 16 | "precomposedIcons": false, 17 | "declareOnlyDefaultIcon": true 18 | }, 19 | "appName": "HackUPC" 20 | }, 21 | "desktopBrowser": { 22 | "design": "background", 23 | "backgroundColor": "#ffffff", 24 | "backgroundRadius": 1, 25 | "imageScale": 1 26 | }, 27 | "windows": { 28 | "masterPicture": { 29 | "type": "path", 30 | "content": "src/assets/favicon/favicon-white.svg" 31 | }, 32 | "pictureAspect": "noChange", 33 | "backgroundColor": "#1f143a", 34 | "onConflict": "override", 35 | "assets": { 36 | "windows80Ie10Tile": false, 37 | "windows10Ie11EdgeTiles": { 38 | "small": false, 39 | "medium": true, 40 | "big": false, 41 | "rectangle": false 42 | } 43 | }, 44 | "appName": "HackUPC" 45 | }, 46 | "androidChrome": { 47 | "pictureAspect": "noChange", 48 | "themeColor": "#1f143a", 49 | "manifest": { 50 | "name": "HackUPC", 51 | "display": "browser", 52 | "orientation": "notSet", 53 | "onConflict": "override", 54 | "declared": true 55 | }, 56 | "assets": { 57 | "legacyIcon": false, 58 | "lowResolutionIcons": false 59 | } 60 | }, 61 | "safariPinnedTab": { 62 | "pictureAspect": "blackAndWhite", 63 | "threshold": 90, 64 | "themeColor": "#1f143a" 65 | } 66 | }, 67 | "settings": { 68 | "compression": 5, 69 | "scalingAlgorithm": "Mitchell", 70 | "errorOnImageTooSmall": false, 71 | "readmeFile": false, 72 | "htmlCodeFile": true, 73 | "usePathAsIs": false 74 | }, 75 | "versioning": { 76 | "paramName": "v", 77 | "paramValue": "gAePv3mpjq" 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import './assets/favicon/favicon.ico' 2 | import './assets/ogimage.png' 3 | import './assets/images/hackupc-logo-black.svg' 4 | 5 | import 'normalize.css' 6 | import './styles/style.scss' 7 | 8 | import 'focus-visible' 9 | 10 | import './scripts/sw' 11 | import './scripts/analytics' 12 | import './scripts/cookies' 13 | import './scripts/hero' 14 | import './scripts/faq' 15 | -------------------------------------------------------------------------------- /src/scripts/analytics.ts: -------------------------------------------------------------------------------- 1 | const GOOGLE_ANALYTICS_MEASUREMENT_ID = 'G-WFBH19BZ64' 2 | 3 | if (process.env.NODE_ENV === 'production') { 4 | const script = document.createElement('script') 5 | script.src = `https://www.googletagmanager.com/gtag/js?id=${GOOGLE_ANALYTICS_MEASUREMENT_ID}` 6 | document.body.append(script) 7 | } else { 8 | gtag = (...args: unknown[]) => { 9 | console.log('Emmited event to Google Analytics:', args) 10 | } 11 | } 12 | 13 | gtag('js', new Date()) 14 | gtag('config', GOOGLE_ANALYTICS_MEASUREMENT_ID, { anonymize_ip: true }) 15 | gtag('set', { hackupc_edition: '2021' }) 16 | 17 | const subscribeForms: NodeListOf = document.querySelectorAll( 18 | '[data-ga-subscribe-form]' 19 | ) 20 | subscribeForms.forEach((elem) => { 21 | elem.addEventListener( 22 | 'submit', 23 | () => { 24 | gtag('event', 'subscribe', { 25 | category: 'Subscribe', 26 | label: 'Subscribe form submitted', 27 | }) 28 | }, 29 | { passive: true } 30 | ) 31 | }) 32 | 33 | const applyButtons: NodeListOf = document.querySelectorAll( 34 | '[data-ga-apply-button]' 35 | ) 36 | applyButtons.forEach((elem) => { 37 | elem.addEventListener( 38 | 'click', 39 | () => { 40 | gtag('event', 'apply', { 41 | category: 'Apply', 42 | label: 'Apply button clicked', 43 | role: elem.dataset.role, 44 | location: elem.dataset.location, 45 | }) 46 | }, 47 | { passive: true } 48 | ) 49 | }) 50 | 51 | const navLinks: NodeListOf = 52 | document.querySelectorAll('[data-ga-nav-item]') 53 | navLinks.forEach((elem) => { 54 | elem.addEventListener( 55 | 'click', 56 | () => { 57 | gtag('event', 'navbar-click', { 58 | category: 'Navigation', 59 | label: 'Navbar link clicked', 60 | location: elem.href, 61 | }) 62 | }, 63 | { passive: true } 64 | ) 65 | }) 66 | 67 | const faqTitles: NodeListOf = 68 | document.querySelectorAll('.faq__title') 69 | faqTitles.forEach((elem) => { 70 | elem.addEventListener( 71 | 'click', 72 | () => { 73 | if (!elem.dataset.clicked) { 74 | elem.dataset.clicked = 'true' 75 | 76 | gtag('event', 'faq_expand', { 77 | category: 'FAQ', 78 | label: 'FAQ question expanded', 79 | question: elem.textContent?.trim() ?? '', 80 | }) 81 | } 82 | }, 83 | { passive: true } 84 | ) 85 | }) 86 | -------------------------------------------------------------------------------- /src/scripts/cookies.ts: -------------------------------------------------------------------------------- 1 | const cookieNotice = document.getElementById('gdpr') 2 | 3 | if (cookieNotice) { 4 | if (window.localStorage.getItem('cookies') !== '1') { 5 | cookieNotice.classList.remove('gdpr--hidden') 6 | } 7 | 8 | const cookieNoticeClose = document.getElementById('gdpr-close') 9 | cookieNoticeClose?.addEventListener('click', () => { 10 | window.localStorage.setItem('cookies', '1') 11 | cookieNotice.classList.add('gdpr--hidden') 12 | 13 | cookieNotice.style.display = 'flex' 14 | setTimeout(() => { 15 | cookieNotice.style.display = '' 16 | }, 400) 17 | }) 18 | } 19 | -------------------------------------------------------------------------------- /src/scripts/faq.ts: -------------------------------------------------------------------------------- 1 | const faqLinkElems: NodeListOf = document.querySelectorAll( 2 | '.faq__answer[aria-hidden="true"] a' 3 | ) 4 | for (const linkElem of faqLinkElems) { 5 | linkElem.tabIndex = -1 6 | } 7 | 8 | const faqQuestionTitleElems: NodeListOf = 9 | document.querySelectorAll('.faq__title') 10 | for (const faqQuestionTitleElem of faqQuestionTitleElems) { 11 | faqQuestionTitleElem.addEventListener('click', () => { 12 | const faqQuestionElem = faqQuestionTitleElem.closest('.faq__question') 13 | const faqAnswerElem: HTMLElement | null = 14 | faqQuestionElem?.querySelector('.faq__answer') ?? null 15 | // const faqLinksElems: NodeListOf = faqQuestionElem.querySelectorAll('a'); 16 | 17 | if (faqQuestionElem && faqAnswerElem) { 18 | if (faqQuestionTitleElem.getAttribute('aria-expanded') === 'true') { 19 | faqQuestionElem.classList.remove('faq__question--expanded') 20 | faqQuestionTitleElem.setAttribute('aria-expanded', 'false') 21 | faqAnswerElem.setAttribute('aria-hidden', 'true') 22 | faqAnswerElem.style.maxHeight = '' 23 | 24 | faqAnswerElem.querySelectorAll('a').forEach((linkElem) => { 25 | linkElem.tabIndex = -1 26 | }) 27 | } else { 28 | faqQuestionElem.classList.add('faq__question--expanded') 29 | faqAnswerElem.setAttribute('aria-hidden', 'false') 30 | faqQuestionTitleElem.setAttribute('aria-expanded', 'true') 31 | faqAnswerElem.style.maxHeight = `${faqAnswerElem.scrollHeight}px` 32 | 33 | faqAnswerElem.querySelectorAll('a').forEach((linkElem) => { 34 | linkElem.tabIndex = 0 35 | }) 36 | } 37 | } 38 | }) 39 | } 40 | -------------------------------------------------------------------------------- /src/scripts/hero/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hackupc/old-v2-hackupc-landing/c8365d9bb6bef0b2cc35472f9b12b0d9e1e39f91/src/scripts/hero/index.ts -------------------------------------------------------------------------------- /src/scripts/sw.ts: -------------------------------------------------------------------------------- 1 | /* 2 | if ('serviceWorker' in navigator) { 3 | window.addEventListener('load', async () => { 4 | await navigator.serviceWorker.register('/service-worker.js') 5 | }) 6 | } 7 | */ 8 | 9 | window.addEventListener('beforeinstallprompt', (event) => { 10 | event.preventDefault() 11 | }) 12 | -------------------------------------------------------------------------------- /src/styles/sections/about-us.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | 3 | .section--about-us { 4 | border-bottom: 0; 5 | background: url('/src/assets/images/trencadis/very-light.svg') #f2ede6 center / 6 | 640px repeat; 7 | } 8 | 9 | .about-us__subtitle { 10 | margin: 3rem 0; 11 | font-size: 1.25rem; 12 | font-weight: 600; 13 | } 14 | @media only screen and (max-width: 27.5rem) { 15 | .section--about-us .section__title { 16 | font-size: calc(1rem + 4vw); 17 | } 18 | 19 | .about-us__subtitle { 20 | font-size: 1.125rem; 21 | } 22 | } 23 | 24 | .about-us__layout { 25 | display: grid; 26 | margin-top: 2rem; 27 | gap: 2rem; 28 | grid-template: auto / auto auto; 29 | place-content: center; 30 | place-items: center; 31 | 32 | > img, 33 | > svg { 34 | width: 15rem; 35 | } 36 | } 37 | @media only screen and (max-width: 15rem * 2 + 2rem + 4rem) { 38 | .about-us__layout { 39 | grid-template: auto auto / auto; 40 | } 41 | } 42 | 43 | .card--about-us { 44 | padding: 2rem; 45 | background-color: $c-about-us-bg-card; 46 | } 47 | -------------------------------------------------------------------------------- /src/styles/sections/faq.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | 3 | .section--faq { 4 | background: url('/src/assets/images/trencadis/very-light.svg') #f2ede6 center / 5 | 640px repeat; 6 | 7 | h2 > small { 8 | font-size: 1em; 9 | text-transform: lowercase; 10 | } 11 | 12 | .section__title { 13 | display: inline-block; 14 | padding: 0.5rem 1rem; 15 | border: solid 7px #fff; 16 | border-radius: $border-radius-big; 17 | background: url('/src/assets/images/trencadis/light.svg') #f2eee7 center / 18 | 640px repeat; 19 | } 20 | } 21 | 22 | .faq { 23 | display: flex; 24 | flex-wrap: wrap; 25 | margin: -0.5rem; 26 | 27 | dd, 28 | dl { 29 | margin: 0; 30 | } 31 | } 32 | 33 | .faq__column { 34 | display: flex; 35 | flex: 1 1 20rem; 36 | flex-direction: column; 37 | } 38 | 39 | .faq__category { 40 | display: block; 41 | padding: 1rem; 42 | border-radius: $border-radius-big; 43 | margin: 0.5rem; 44 | background-color: $c-faq-block; 45 | } 46 | 47 | .faq__category-title { 48 | margin: 1rem 0 2rem; 49 | font-size: 1.5rem; 50 | line-height: 0.8; 51 | text-transform: uppercase; 52 | } 53 | 54 | .faq__question { 55 | position: relative; 56 | padding: 1rem; 57 | padding-bottom: 0; 58 | border-radius: $border-radius-small; 59 | margin: 1rem 0; 60 | background-color: $c-faq-question; 61 | text-align: left; 62 | transition: padding-bottom 200ms $ease-quad, box-shadow 200ms $ease-bounce; 63 | 64 | &:first-child { 65 | margin-top: 0; 66 | } 67 | 68 | &:last-child { 69 | margin-bottom: 0; 70 | } 71 | 72 | &::before { 73 | position: absolute; 74 | top: 0; 75 | right: 0; 76 | bottom: 0; 77 | left: 0; 78 | border-radius: $border-radius-small; 79 | background-image: $c-faq-hover; 80 | content: ''; 81 | opacity: 0; 82 | transition: opacity 1.5s cubic-bezier(0.19, 1, 0.22, 1); 83 | } 84 | 85 | &:hover::before { 86 | opacity: 1; 87 | transition: opacity 50ms $ease-cubic; 88 | } 89 | } 90 | 91 | $faq-arrow-angle: 40deg; 92 | 93 | .faq__title { 94 | position: relative; 95 | width: calc(100% + 2rem); 96 | padding: 1rem 4rem 1rem 1rem; 97 | border: 0; 98 | border-radius: $border-radius-small; 99 | margin: -1rem; 100 | background: none; 101 | color: inherit; 102 | cursor: pointer; 103 | font-size: 1.125rem; 104 | font-weight: bold; 105 | line-height: 1; 106 | -webkit-tap-highlight-color: rgb(0 0 0 / 0%); 107 | text-align: inherit; 108 | 109 | &::before, 110 | &::after { 111 | position: absolute; 112 | top: 50%; 113 | right: 0; 114 | width: 1rem; 115 | height: 0.25rem; 116 | background-color: currentcolor; 117 | content: ''; 118 | transition: transform 300ms cubic-bezier(0.18, 0.89, 0.35, 1.15); 119 | } 120 | 121 | &::before { 122 | transform: translate(-1rem, 75%) rotate(-$faq-arrow-angle); 123 | transform-origin: left center; 124 | } 125 | 126 | &::after { 127 | transform: translate(-1.85rem, 75%) rotate($faq-arrow-angle); 128 | transform-origin: right center; 129 | } 130 | 131 | &:focus { 132 | outline: none; 133 | } 134 | } 135 | 136 | .faq__answer { 137 | position: relative; 138 | overflow: hidden; 139 | max-height: 0; 140 | margin: 1rem 0 0; 141 | transition: max-height 200ms $ease-quad; 142 | } 143 | 144 | .faq__question--expanded { 145 | padding-bottom: 1rem; 146 | 147 | .faq__title { 148 | &::before { 149 | transform: translate(-1rem, -125%) rotate($faq-arrow-angle); 150 | } 151 | 152 | &::after { 153 | transform: translate(-1.85rem, -125%) rotate(-$faq-arrow-angle); 154 | } 155 | } 156 | } 157 | 158 | .faq__others-title { 159 | margin: 5rem 0 1rem; 160 | font-size: 1.75rem; 161 | text-align: center; 162 | } 163 | 164 | .faq__others-answer { 165 | margin: 0; 166 | text-align: center; 167 | } 168 | -------------------------------------------------------------------------------- /src/styles/sections/follow-us.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | 3 | .section--follow-us { 4 | background: url('/src/assets/images/trencadis/cyan.svg') #f2ede6 center / 5 | 640px repeat; 6 | 7 | .content__wrapper { 8 | padding: 8rem 1rem; 9 | } 10 | } 11 | 12 | .follow-us__title { 13 | display: inline-block; 14 | padding: 1rem 2rem; 15 | border: solid 7px #fff; 16 | border-radius: $border-radius-big; 17 | margin: 0; 18 | background: url('/src/assets/images/trencadis/light.svg') #f2eee7 center / 19 | 640px repeat; 20 | font-size: 3rem; 21 | font-weight: 700; 22 | } 23 | 24 | .follow-us__subtitle { 25 | display: inline-block; 26 | padding: 0.5rem 1rem; 27 | border-radius: 0 0 $border-radius-big $border-radius-big; 28 | border-top: 7px; 29 | margin: 0 0 3.25rem; 30 | margin-top: -7px; 31 | background: #fff; 32 | color: $c-primary; 33 | font-size: 1.75rem; 34 | font-weight: 600; 35 | } 36 | 37 | .follow-us__list { 38 | display: inline-flex; 39 | flex-wrap: wrap; 40 | align-items: center; 41 | justify-content: center; 42 | padding: 0; 43 | margin: -0.5rem; 44 | gap: 0.5rem; 45 | } 46 | 47 | .follow-us__item { 48 | display: block; 49 | width: 5rem; 50 | box-sizing: content-box; 51 | border-radius: 100%; 52 | background: #fff; 53 | transition: transform 0.3s cubic-bezier(0.17, 2.55, 0.69, 0.4); 54 | will-change: transform; 55 | 56 | a, 57 | img, 58 | svg { 59 | display: block; 60 | } 61 | 62 | a { 63 | padding: 0.5rem; 64 | border-radius: 50%; 65 | color: #fff; 66 | 67 | &:focus-visible { 68 | box-shadow: 0 0 0 0.25rem $c-primary; 69 | outline: none; 70 | } 71 | } 72 | 73 | &:hover { 74 | transform: scale(1.15); 75 | transition: transform 0.15s cubic-bezier(0.18, 0.89, 0.57, 2.05); 76 | } 77 | } 78 | 79 | @media only screen and (max-width: 52rem) { 80 | .follow-us__title { 81 | font-size: 2.5rem; 82 | } 83 | 84 | .follow-us__subtitle { 85 | font-size: 1.25rem; 86 | } 87 | } 88 | @media only screen and (max-width: 7 * 5rem + 1rem) { 89 | .follow-us__list { 90 | max-width: 4 * 5rem; 91 | } 92 | } 93 | 94 | @media only screen and (max-width: 29.3rem) { 95 | .follow-us__title { 96 | font-size: 2rem; 97 | } 98 | 99 | .follow-us__subtitle { 100 | font-size: 1rem; 101 | } 102 | 103 | .follow-us__item { 104 | width: 4.5rem; 105 | } 106 | 107 | .follow-us__list { 108 | max-width: 4 * 4.5rem; 109 | } 110 | 111 | .section--follow-us { 112 | .content__wrapper { 113 | padding: 5rem 1rem; 114 | } 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /src/styles/sections/footer.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | 3 | /* Footer section */ 4 | .section--footer { 5 | overflow: hidden; 6 | padding: 2rem 0.5rem 1.5rem; 7 | border-bottom: 0; 8 | background: url('/src/assets/images/trencadis/very-light.svg') #f2ede6 center / 9 | 640px repeat; 10 | color: #158566; 11 | text-align: center; 12 | } 13 | 14 | .footer { 15 | &__link { 16 | color: $c-primary-accessible; 17 | text-decoration: none; 18 | } 19 | 20 | &__link:hover { 21 | text-decoration: underline; 22 | } 23 | 24 | &__element { 25 | margin: 1rem auto; 26 | } 27 | 28 | &__element--first { 29 | margin-top: 0; 30 | } 31 | 32 | &__element--last { 33 | margin-bottom: 0; 34 | } 35 | 36 | &__previous-edition { 37 | display: inline-block; 38 | margin-bottom: 2rem; 39 | font-size: 1.1rem; 40 | } 41 | } 42 | 43 | .footer-column { 44 | display: flex; 45 | max-width: 1200px; 46 | flex-wrap: wrap; 47 | justify-content: space-around; 48 | margin: -0.5rem auto; 49 | 50 | &__element { 51 | margin: 0.5rem; 52 | } 53 | } 54 | 55 | .section__list { 56 | &--links-list { 57 | max-width: 500px; 58 | flex-wrap: nowrap; 59 | align-items: center; 60 | } 61 | 62 | &--packed { 63 | max-width: 350px; 64 | flex-grow: 1; 65 | 66 | @media (max-width: 25rem) { 67 | font-size: 4vw; 68 | } 69 | } 70 | 71 | &--contact { 72 | display: flex; 73 | max-width: 17.5rem; 74 | flex-basis: 17.5rem; 75 | flex-wrap: nowrap; 76 | justify-content: center; 77 | padding: 0; 78 | } 79 | } 80 | 81 | .links-list { 82 | line-height: 1; 83 | text-decoration: none; 84 | vertical-align: middle; 85 | 86 | &__separator { 87 | opacity: 0.5; 88 | } 89 | } 90 | 91 | .contact { 92 | display: block; 93 | flex: 1; 94 | margin: 0; 95 | transition: transform 100ms ease-out; 96 | 97 | &__link { 98 | display: block; 99 | width: 100%; 100 | color: #fff; 101 | line-height: 1; 102 | } 103 | 104 | &__icon { 105 | width: 1.5rem; 106 | min-width: 20px; 107 | margin: auto; 108 | } 109 | 110 | &:hover { 111 | transform: scale(1.25); 112 | } 113 | } 114 | 115 | .signature { 116 | &::before, 117 | &::after { 118 | content: ''; 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /src/styles/sections/hero.scss: -------------------------------------------------------------------------------- 1 | @use 'hero/hero'; 2 | -------------------------------------------------------------------------------- /src/styles/sections/live.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | 3 | .section--live { 4 | background: url('/src/assets/images/trencadis/very-light.svg') #f2ede6 center / 5 | 640px repeat; 6 | } 7 | 8 | .live { 9 | &__dot { 10 | display: inline-block; 11 | width: 0.6em; 12 | height: 0.6em; 13 | border-radius: 100%; 14 | margin: 0 0.2em 0 -0.2em; 15 | animation: live 2.5s cubic-bezier(0.82, 0.23, 0.55, 0.95) infinite alternate; 16 | background: $c-primary; 17 | vertical-align: 0.05em; 18 | 19 | @keyframes live { 20 | from { 21 | opacity: 1; 22 | } 23 | 24 | to { 25 | opacity: 0.25; 26 | } 27 | } 28 | 29 | &--button { 30 | width: 12px; 31 | height: 12px; 32 | margin-right: 1ch; 33 | background: currentcolor; 34 | vertical-align: 0; 35 | } 36 | } 37 | 38 | &__description { 39 | margin: 0 0 2.5rem; 40 | font-size: 1.125rem; 41 | line-height: 2; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/styles/sections/participate.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | 3 | .section--participate { 4 | position: relative; 5 | background: url('/src/assets/images/trencadis/brown.svg') #f2ede6 6 | calc(50% - 640px / 2) calc(50% - 320px) / 640px repeat; 7 | 8 | .section__title { 9 | display: inline-block; 10 | padding: 0.5rem 1rem; 11 | border: solid 7px #fff; 12 | border-radius: $border-radius-big; 13 | background: url('/src/assets/images/trencadis/light.svg') #f2eee7 center / 14 | 640px repeat; 15 | } 16 | } 17 | 18 | .participate { 19 | &__container { 20 | display: grid; 21 | gap: 2rem; 22 | grid-template: min-content min-content / 1fr 1fr; 23 | 24 | > div { 25 | display: flex; 26 | flex-direction: column; 27 | 28 | > dd { 29 | display: flex; 30 | flex-direction: column; 31 | flex-grow: 1; 32 | } 33 | } 34 | } 35 | 36 | &__item { 37 | padding: 2.5rem; 38 | border: solid #fff 7px; 39 | border-radius: $border-radius-big; 40 | background: url('/src/assets/images/trencadis/light.svg') #f2eee7 center / 41 | 640px repeat; 42 | background-color: $c-bg-light; 43 | text-align: left; 44 | 45 | &--mentor { 46 | order: 1; 47 | } 48 | 49 | &--volunteer { 50 | order: 2; 51 | } 52 | 53 | &--partner { 54 | order: 3; 55 | } 56 | 57 | &--sponsor { 58 | order: 4; 59 | } 60 | } 61 | 62 | &__title { 63 | margin: 0; 64 | font-size: 1.75rem; 65 | font-weight: bold; 66 | line-height: 0.8; 67 | } 68 | 69 | &__desc { 70 | flex-grow: 1; 71 | margin: 1rem 0; 72 | } 73 | 74 | &__bottom-row { 75 | display: flex; 76 | align-items: center; 77 | margin-bottom: -0.75rem; 78 | } 79 | 80 | &__message { 81 | display: inline-block; 82 | flex-grow: 1; 83 | margin: 0 -1rem 0 1rem; 84 | opacity: 0.75; 85 | } 86 | 87 | @media only screen and (max-width: 1000px) { 88 | &__container { 89 | gap: 1rem; 90 | } 91 | } 92 | 93 | @media only screen and (max-width: 700px) { 94 | &__container { 95 | grid-template: min-content min-content min-content min-content / auto; 96 | } 97 | 98 | &__item { 99 | padding: 2rem; 100 | 101 | &--volunteer { 102 | order: 1; 103 | } 104 | 105 | &--mentor { 106 | order: 2; 107 | } 108 | 109 | &--sponsor { 110 | order: 3; 111 | } 112 | 113 | &--partner { 114 | order: 4; 115 | } 116 | } 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /src/styles/sections/photos.scss: -------------------------------------------------------------------------------- 1 | .card--photos { 2 | margin-top: 2rem; 3 | } 4 | 5 | .photos__title { 6 | text-align: center; 7 | } 8 | 9 | .photo-grid { 10 | position: relative; 11 | display: grid; 12 | gap: 1em; 13 | grid-template: 1fr 1fr 1fr / 1fr 1fr 1fr; 14 | } 15 | 16 | .photo-grid__overlay { 17 | position: absolute; 18 | top: -1em; 19 | right: -1em; 20 | bottom: -1em; 21 | left: -1em; 22 | display: flex; 23 | align-items: center; 24 | justify-content: center; 25 | border-radius: 1em; 26 | background: rgb(0 0 0 / 50%); 27 | opacity: 0; 28 | transition: opacity 400ms ease-out; 29 | } 30 | 31 | .photo-grid__overlay-img { 32 | width: 25%; 33 | } 34 | 35 | .photo-grid:hover > .photo-grid__overlay { 36 | opacity: 1; 37 | } 38 | 39 | .photo-grid__photo { 40 | width: 100%; 41 | border-radius: 3px; 42 | } 43 | 44 | .photo-grid-wrapper { 45 | display: block; 46 | max-width: 700px; 47 | margin: auto; 48 | text-decoration: none; 49 | } 50 | 51 | .photo-grid__more { 52 | display: flex; 53 | flex-wrap: wrap; 54 | align-items: center; 55 | justify-content: center; 56 | border-radius: 3px; 57 | background: rgb(0 0 0 / 33%); 58 | color: var(--text-light); 59 | font-size: 5vw; 60 | font-weight: 900; 61 | line-height: 1; 62 | text-align: center; 63 | text-decoration: none; 64 | text-transform: uppercase; 65 | } 66 | 67 | .photo-grid__more-text--small { 68 | font-size: 0.85em; 69 | } 70 | 71 | @media only screen and (min-width: 40rem) { 72 | .photo-grid__more { 73 | font-size: 2rem; 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/styles/sections/sponsors/logo-alignments.scss: -------------------------------------------------------------------------------- 1 | .logo__image { 2 | &--midokura { 3 | padding: 0 0.5rem; 4 | } 5 | 6 | &--mundimoto { 7 | padding: 0 0.4em; 8 | } 9 | 10 | &--hp { 11 | padding: 1.2em; 12 | } 13 | 14 | &--mckinsey { 15 | padding: 1.6em; 16 | } 17 | 18 | &--restbai { 19 | padding: 0; 20 | } 21 | 22 | &--optiver { 23 | padding: 0; 24 | } 25 | 26 | &--capchase { 27 | padding: 1.6em; 28 | } 29 | 30 | &--ithinkupc { 31 | padding: 2.7em 0.4em 2.7em 0.8em; 32 | } 33 | 34 | &--strands { 35 | padding: 0; 36 | } 37 | 38 | &--huawei { 39 | padding: 0 1rem; 40 | } 41 | 42 | &--happyscribe { 43 | padding: 2.65em 0.4em; 44 | } 45 | 46 | &--floorfy { 47 | padding: 3em 0.4em; 48 | } 49 | 50 | &--typeform { 51 | padding: 2.7em 0.4em; 52 | } 53 | 54 | &--infojobs { 55 | padding: 2.3em 0.4em; 56 | } 57 | 58 | &--thoughtworks { 59 | padding: 3em 0.4em; 60 | } 61 | 62 | &--google { 63 | padding: 1.7em 0.4em; 64 | } 65 | 66 | &--skyscanner { 67 | padding: 1.2em 0.4em; 68 | } 69 | 70 | &--facebook { 71 | padding: 2.7em 0.4em; 72 | } 73 | 74 | &--vueling { 75 | padding: 2.1em 0.4em; 76 | } 77 | 78 | &--bunge { 79 | padding: 1rem; 80 | } 81 | 82 | &--github { 83 | padding: 2.5em 0.4em; 84 | } 85 | 86 | &--upc { 87 | padding: 1.25em 0.4em; 88 | } 89 | 90 | &--upc-50 { 91 | padding: 0.9em 0.4em; 92 | } 93 | 94 | &--fib { 95 | padding: 2.5em 0.4em; 96 | } 97 | 98 | &--telecos { 99 | padding: 1.5em 0.4em; 100 | } 101 | 102 | &--cfis { 103 | padding: 1.5em 0.4em; 104 | } 105 | 106 | &--stickermule { 107 | padding: 1.2em 0; 108 | } 109 | 110 | &--mlh { 111 | padding: 1em 2em; 112 | } 113 | 114 | &--cocacola { 115 | padding: 0.5rem; 116 | } 117 | 118 | &--coeinf { 119 | padding: 0.75em 0.4em; 120 | } 121 | 122 | &--ajuntament_de_barcelona { 123 | padding: 2.25em 0.4em; 124 | } 125 | 126 | &--digital_ocean { 127 | padding: 2.7em 0.6em; 128 | } 129 | 130 | &--twilio { 131 | padding: 1.1rem; 132 | } 133 | 134 | &--moncafe { 135 | padding: 0 1em; 136 | } 137 | 138 | &--birba { 139 | padding: 0.5em; 140 | } 141 | 142 | &--pura-fruta { 143 | padding: 0; 144 | } 145 | 146 | &--haribo { 147 | padding: 0 0.5rem; 148 | } 149 | 150 | &--dominos { 151 | padding: 0.6em; 152 | } 153 | 154 | &--nissin { 155 | padding: 1em; 156 | } 157 | 158 | &--zanuy { 159 | padding: 1em; 160 | } 161 | 162 | &--frit-ravich { 163 | padding: 0.8em; 164 | } 165 | 166 | &--cuetara { 167 | padding: 0.2em; 168 | } 169 | 170 | &--artiach { 171 | padding: 0.2em; 172 | } 173 | } 174 | -------------------------------------------------------------------------------- /src/styles/sections/what-is-a-hackathon.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:math'; 2 | @use 'src/styles/variables' as *; 3 | 4 | .section--what-is-a-hackathon { 5 | overflow: visible; 6 | margin-top: 15px; 7 | background: url('/src/assets/images/trencadis/very-light.svg') #f2ede6 center / 8 | 640px repeat; 9 | } 10 | 11 | .content__wrapper--what-is-a-hackathon { 12 | padding-top: calc(2rem + 100px); 13 | margin-top: -100px; 14 | 15 | > img, 16 | > svg { 17 | width: 10rem; 18 | height: 10rem; 19 | } 20 | } 21 | 22 | $card-font-variation: 2px; 23 | $card-font-base: 16px; 24 | $card-padding-variation-h: 4 * 16px; 25 | $card-padding-variation-v: 1 * 16px; 26 | $card-padding-base: 15px; 27 | 28 | $breakpoint-small-screen: 500px; 29 | $breakpoint-mid-small-screen: 600px; 30 | 31 | .card--big { 32 | padding: clamp( 33 | #{$card-padding-base}, 34 | calc( 35 | #{math.div(100vw * $card-padding-variation-v, $breakpoint-small-screen)} + 36 | #{($card-padding-base - $card-padding-variation-v)} 37 | ), 38 | #{$card-padding-base + $card-padding-variation-v} 39 | ) 40 | clamp( 41 | #{$card-padding-base}, 42 | calc( 43 | #{math.div(100vw * $card-padding-variation-h, $breakpoint-small-screen)} + 44 | #{($card-padding-base - $card-padding-variation-h)} 45 | ), 46 | #{$card-padding-base + $card-padding-variation-h} 47 | ); 48 | margin: 10px; 49 | font-size: clamp( 50 | #{$card-font-base}, 51 | calc( 52 | #{$card-font-base - $card-font-variation} + #{math.div( 53 | 100vw * $card-font-variation, 54 | $breakpoint-small-screen 55 | )} 56 | ), 57 | #{$card-font-base + $card-font-variation} 58 | ); 59 | } 60 | 61 | .card--outline { 62 | } 63 | 64 | .card--mission { 65 | position: relative; 66 | display: grid; 67 | // margin-top: 6rem; 68 | // margin-bottom: 6rem; 69 | gap: clamp( 70 | #{$card-padding-base}, 71 | calc( 72 | 100vw * #{math.div( 73 | $card-padding-variation-v, 74 | $breakpoint-mid-small-screen 75 | )} + #{$card-padding-base - $card-padding-variation-v} 76 | ), 77 | #{$card-padding-base + $card-padding-variation-v} 78 | ); 79 | grid-template: auto / auto auto; 80 | place-content: center; 81 | place-items: center; 82 | 83 | @media only screen and (max-width: $breakpoint-mid-small-screen) { 84 | grid-template: auto auto / auto; 85 | } 86 | 87 | > img, 88 | > svg { 89 | width: 10rem; 90 | height: 10rem; 91 | } 92 | 93 | // &::before { 94 | // position: absolute; 95 | // border-width: 100px; 96 | // border-style: solid; 97 | // border-image: url('/src/assets/images/borders/crown.svg') 100 repeat; 98 | // border-image-outset: 80px; 99 | // content: ''; 100 | // inset: 0; 101 | // } 102 | } 103 | 104 | .card__title { 105 | margin: 0 -0.5rem 1rem 0; 106 | font-size: 2rem; 107 | } 108 | 109 | .card__text { 110 | margin: 0; 111 | 112 | strong { 113 | font-size: 1.25em; 114 | font-weight: bold; 115 | line-height: 1; 116 | text-transform: uppercase; 117 | vertical-align: text-bottom; 118 | } 119 | } 120 | 121 | .card--covid { 122 | display: grid; 123 | padding-left: clamp( 124 | #{$card-padding-base}, 125 | calc( 126 | 100vw * #{math.div( 127 | $card-padding-variation-v, 128 | $breakpoint-mid-small-screen 129 | )} + #{$card-padding-base - $card-padding-variation-v} 130 | ), 131 | #{$card-padding-base + $card-padding-variation-v} 132 | ); 133 | border: solid 0.3333rem $c-bg-light; 134 | margin-top: 2rem; 135 | background-color: $c-bg-light; 136 | gap: clamp( 137 | #{$card-padding-base}, 138 | calc( 139 | 100vw * #{math.div( 140 | $card-padding-variation-v, 141 | $breakpoint-mid-small-screen 142 | )} + #{$card-padding-base - $card-padding-variation-v} 143 | ), 144 | #{$card-padding-base + $card-padding-variation-v} 145 | ); 146 | grid-template: auto / auto auto; 147 | place-content: center; 148 | place-items: center; 149 | 150 | @media only screen and (max-width: $breakpoint-mid-small-screen) { 151 | grid-template: auto auto / auto; 152 | } 153 | 154 | > img, 155 | > svg { 156 | width: 12rem; 157 | height: 12rem; 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /src/styles/shared/cookies.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | @use 'sass:color'; 3 | 4 | .gdpr { 5 | position: fixed; 6 | z-index: 100; 7 | right: 0.5rem; 8 | bottom: 0.5rem; 9 | left: 0.5rem; 10 | display: flex; 11 | max-width: 1000px; 12 | flex-wrap: wrap; 13 | align-items: center; 14 | justify-content: space-between; 15 | padding: 0.5rem; 16 | border: solid 2.5px currentcolor; 17 | border-radius: $border-radius-medium; 18 | margin: 0 auto; 19 | background-color: $c-gdpr-bg; 20 | box-shadow: 0 0.25rem 1rem rgb(0 0 0 / 30%); 21 | color: $c-gdpr-txt; 22 | transition: transform 400ms $ease-quad, opacity 400ms $ease-quad; 23 | // animation: gdpr-show 400ms $ease-bounce; 24 | // @keyframes gdpr-show { 25 | // from {transform: translateY(100%); opacity: 0.5;} 26 | // to {transform: translateY(0%); opacity: 1;} 27 | // } 28 | 29 | @media (min-width: 640px) { 30 | right: 1.5rem; 31 | bottom: 1.5rem; 32 | left: 1.5rem; 33 | padding: 1rem; 34 | } 35 | 36 | &--hidden { 37 | display: none; 38 | opacity: 0; 39 | pointer-events: none; 40 | transform: translateY(100%); 41 | } 42 | 43 | &__emoji { 44 | margin-right: 0.5rem; 45 | cursor: default; 46 | font-size: 1.5rem; 47 | line-height: 1; 48 | transition: transform 250ms $ease-bounce; 49 | @media (min-width: 640px) { 50 | margin-right: 0.75rem; 51 | } 52 | 53 | &:hover { 54 | transform: rotate(90deg); 55 | } 56 | } 57 | 58 | &__text { 59 | flex: 1; 60 | margin: 0; 61 | font-size: 0.85rem; 62 | font-weight: 600; 63 | line-height: 1.5; 64 | @media (min-width: 640px) { 65 | font-size: 1rem; 66 | } 67 | } 68 | 69 | &__link { 70 | // text-shadow: 0 0 1rem rgb(0 0 0 / 66.7%); 71 | } 72 | // &__disclaimer { 73 | // margin-right: 0.5rem; 74 | // } 75 | &__button { 76 | flex-shrink: 0; 77 | padding: 0.5rem; 78 | border: 0; 79 | border-radius: $border-radius-small; 80 | margin: -0.25rem -0.25rem -0.25rem 0; 81 | background-color: transparent; 82 | color: $c-gdpr-txt; 83 | cursor: pointer; 84 | 85 | &:hover, 86 | &:focus { 87 | background-color: color.adjust($c-gdpr-txt, $alpha: -0.8); 88 | outline: none; 89 | } 90 | } 91 | 92 | &__close-icon { 93 | display: block; 94 | width: 1.5rem; 95 | height: 1.5rem; 96 | color: currentcolor; 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /src/styles/shared/fonts.scss: -------------------------------------------------------------------------------- 1 | @import url('~@fontsource/montserrat/400.css'); 2 | @import url('~@fontsource/montserrat/400-italic.css'); 3 | @import url('~@fontsource/montserrat/500.css'); 4 | @import url('~@fontsource/montserrat/500-italic.css'); 5 | @import url('~@fontsource/montserrat/600.css'); 6 | @import url('~@fontsource/montserrat/700.css'); 7 | @import url('~@fontsource/montserrat/800.css'); 8 | @import url('~@fontsource/montserrat/800-italic.css'); 9 | -------------------------------------------------------------------------------- /src/styles/shared/nav.scss: -------------------------------------------------------------------------------- 1 | @use 'src/styles/variables' as *; 2 | 3 | $nav-height: 3rem; 4 | 5 | body { 6 | padding-top: $nav-height; 7 | } 8 | 9 | .nav { 10 | position: fixed; 11 | z-index: 10; 12 | top: 0; 13 | right: 0; 14 | left: 0; 15 | overflow: hidden; 16 | height: $nav-height; 17 | backdrop-filter: blur(10px); 18 | background-color: rgb(255 255 255 / 60%); 19 | box-shadow: 0 0 1rem rgb(0 0 0 / 30%); 20 | 21 | &__list { 22 | display: flex; 23 | height: 100%; 24 | justify-content: space-between; 25 | padding: 0; 26 | margin: 0; 27 | list-style: none; 28 | } 29 | 30 | &__link { 31 | display: flex; 32 | height: 100%; 33 | align-items: center; 34 | padding: 0 0.5rem; 35 | color: $c-txt-dark; 36 | font-weight: bold; 37 | text-align: center; 38 | text-decoration: none; 39 | } 40 | } 41 | 42 | // TODO: show navbar when it's ready (remember to remove the class in the html) 43 | .hide-navbar { 44 | padding-top: 0; 45 | 46 | .nav { 47 | display: none; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/styles/shared/tags.scss: -------------------------------------------------------------------------------- 1 | @use 'sass:color'; 2 | @use 'src/styles/variables' as *; 3 | 4 | html { 5 | scroll-behavior: smooth; 6 | } 7 | 8 | a { 9 | color: $c-primary-accessible; 10 | } 11 | 12 | ::selection { 13 | background-color: color.adjust($c-primary, $alpha: -0.01); 14 | color: $c-txt-light; 15 | } 16 | 17 | img::selection { 18 | background-color: color.adjust($c-primary, $alpha: -0.5); 19 | } 20 | 21 | p { 22 | line-height: 1.6667; 23 | } 24 | 25 | dd { 26 | margin-left: 0; 27 | } 28 | 29 | code { 30 | padding: 0 0.35rem; 31 | border-radius: 0.25rem; 32 | background-color: color.adjust($c-txt-light, $alpha: -0.85); 33 | font-family: ui-monospace, Menlo, Monaco, 'Cascadia Mono', 'Segoe UI Mono', 34 | 'Roboto Mono', 'Oxygen Mono', 'Ubuntu Monospace', 'Source Code Pro', 35 | 'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace; 36 | } 37 | 38 | :focus { 39 | outline: none; 40 | } 41 | 42 | :focus-visible { 43 | outline: solid 0.25rem currentcolor !important; 44 | } 45 | -------------------------------------------------------------------------------- /src/styles/style.scss: -------------------------------------------------------------------------------- 1 | /* Keep the right order, it's important for overrides */ 2 | // @import "normalize.css"; 3 | 4 | @use 'shared/fonts'; 5 | 6 | @use 'shared/tags'; 7 | @use 'shared/nav'; 8 | @use 'shared/body'; 9 | @use 'shared/cookies'; 10 | 11 | @use 'sections/about-us'; 12 | @use 'sections/during'; 13 | @use 'sections/live'; 14 | @use 'sections/faq'; 15 | @use 'sections/follow-us'; 16 | @use 'sections/footer'; 17 | @use 'sections/hero'; 18 | @use 'sections/participate'; 19 | @use 'sections/photos'; 20 | @use 'sections/sponsors-and-partners'; 21 | @use 'sections/what-is-a-hackathon'; 22 | 23 | @use 'sections/sponsors/logo-alignments'; 24 | -------------------------------------------------------------------------------- /src/styles/variables.scss: -------------------------------------------------------------------------------- 1 | $c-palette-blue: #494136; 2 | $c-palette-black: #241e16; 3 | $c-palette-black-light: #494136; 4 | 5 | $c-bg-darker: #241e16; 6 | $c-bg-dark: #494136; 7 | $c-bg-light: #eae2d6; 8 | $c-bg-lighter: #fff; 9 | 10 | $c-primary: #1cae86; 11 | $c-primary-accessible: #158566; 12 | $c-txt-dark: #000; 13 | $c-txt-light: #fff; 14 | 15 | $c-hero-shadow: hsl(287deg 100% 50% / 66%); 16 | 17 | $c-faq-bg: $c-palette-black-light; 18 | $c-faq-block: $c-bg-light; 19 | $c-faq-question: #dabc98; 20 | $c-faq-hover: linear-gradient(135deg, #e6c287, #deb588); 21 | 22 | $c-during-border: $c-bg-dark; 23 | $c-during-bg: $c-bg-lighter; 24 | $c-during-bg-card: $c-bg-light; 25 | 26 | $c-live-bg: $c-palette-black-light; 27 | 28 | // $c-sponsors-bg: #f1f5ff; 29 | $c-sponsors-shadow: hsl(23deg 100% 50% / 10%); 30 | 31 | $c-about-us-bg: $c-palette-black-light; 32 | $c-about-us-bg-card: $c-bg-light; 33 | 34 | $c-gdpr-bg: #fff; 35 | $c-gdpr-txt: $c-txt-dark; 36 | 37 | $ease-bounce: cubic-bezier(0.18, 0.89, 0.32, 1.28); 38 | $ease-quad: cubic-bezier(0.25, 0.46, 0.45, 0.94); 39 | $ease-quad-in: cubic-bezier(0.55, 0.09, 0.68, 0.53); 40 | $ease-cubic: cubic-bezier(0.22, 0.61, 0.36, 1); 41 | 42 | $border-radius-big: 1rem; 43 | $border-radius-medium: 0.75rem; 44 | $border-radius-small: 0.5rem; 45 | -------------------------------------------------------------------------------- /stylelint.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @type {import("stylelint").Configuration} 3 | */ 4 | module.exports = { 5 | extends: [ 6 | 'stylelint-config-standard', 7 | 'stylelint-config-sass-guidelines', 8 | 'stylelint-config-idiomatic-order', 9 | 'stylelint-config-prettier', 10 | ], 11 | 12 | plugins: ['stylelint-order', 'stylelint-scss'], 13 | 14 | rules: { 15 | 'block-no-empty': null, 16 | 'function-no-unknown': null, 17 | 'max-nesting-depth': null, 18 | 'selector-max-compound-selectors': null, // TODO: set to 3 19 | 'order/properties-alphabetical-order': null, 20 | 'selector-class-pattern': [ 21 | '^(?:(?:o|c|u|t|s|is|has|_|js|qa)-)?[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*(?:__[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:--[a-zA-Z0-9]+(?:-[a-zA-Z0-9]+)*)?(?:\\[.+\\])?$', 22 | { 23 | message: 'Class names must follow BEM convention', 24 | }, 25 | ], 26 | 'declaration-block-no-duplicate-properties': true, 27 | }, 28 | } 29 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "esnext", 4 | "module": "esnext", 5 | "strict": true, 6 | "importHelpers": true, 7 | "moduleResolution": "node", 8 | "skipLibCheck": true, 9 | "esModuleInterop": true, 10 | "allowSyntheticDefaultImports": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "removeComments": true, 13 | "sourceMap": true, 14 | "baseUrl": ".", 15 | "lib": ["esnext", "dom", "dom.iterable", "scripthost"] 16 | }, 17 | "include": ["src"], 18 | "exclude": ["node_modules"], 19 | "$schema": "https://json.schemastore.org/tsconfig" 20 | } 21 | --------------------------------------------------------------------------------