diff --git a/.github/workflows/lead-landing-page.yaml b/.github/workflows/lead-landing-page.yaml new file mode 100644 index 0000000..b2c9190 --- /dev/null +++ b/.github/workflows/lead-landing-page.yaml @@ -0,0 +1,51 @@ +# Simple workflow for deploying static content to GitHub Pages +name: Deploy static content to Pages + +on: + # Runs on pushes targeting the default branch + push: + branches: ['feature/page-lead'] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# Sets the GITHUB_TOKEN permissions to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow one concurrent deployment +concurrency: + group: 'pages' + cancel-in-progress: true + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up Node + uses: actions/setup-node@v4 + with: + node-version: 20 + cache: 'npm' + - name: Install dependencies + run: npm ci + - name: Build + run: npm run build && cp ./dist/index.html ./dist/404.html + - name: Setup Pages + uses: actions/configure-pages@v4 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload dist folder + path: './dist' + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/index.html b/index.html index 6bd3b84..790ccf0 100644 --- a/index.html +++ b/index.html @@ -1,12 +1,42 @@ - - + + + + + + - TECH LEADS CLUB + + + + + + + + + + + + + + Workshop Arquiteturas Evolutivas e Modulares na Prática + + + + + + + +
diff --git a/package-lock.json b/package-lock.json index 3f75483..5e87b7e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,14 +8,24 @@ "name": "techleadsclub", "version": "0.0.0", "dependencies": { + "@hookform/resolvers": "^3.9.0", + "@types/react-router-dom": "^5.3.3", + "axios": "^1.7.2", + "crypto-js": "^4.2.0", "date-fns": "^3.6.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hook-form": "^7.52.1", + "react-input-mask": "^2.0.4", + "react-router-dom": "^6.23.1", "swiper": "^11.1.0" }, "devDependencies": { + "@types/axios": "^0.14.0", + "@types/crypto-js": "^4.2.2", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", + "@types/react-input-mask": "^3.0.5", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "@vitejs/plugin-react": "^4.2.1", @@ -873,6 +883,14 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@hookform/resolvers": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@hookform/resolvers/-/resolvers-3.9.0.tgz", + "integrity": "sha512-bU0Gr4EepJ/EQsH/IwEzYLsT/PEj5C0ynLQ4m+GSHS+xKH4TfSelhluTgOaoc4kA5s7eCsQbM4wvZLzELmWzUg==", + "peerDependencies": { + "react-hook-form": "^7.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.14", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", @@ -1065,6 +1083,14 @@ "node": ">=14" } }, + "node_modules/@remix-run/router": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.16.1.tgz", + "integrity": "sha512-es2g3dq6Nb07iFxGk5GuHN20RwBZOsuDQN7izWIisUcv9r+d2C5jQxqmgkdebXgReWfiyUabcki6Fg77mSNrig==", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.13.1", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.1.tgz", @@ -1247,6 +1273,16 @@ "win32" ] }, + "node_modules/@types/axios": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@types/axios/-/axios-0.14.0.tgz", + "integrity": "sha512-KqQnQbdYE54D7oa/UmYVMZKq7CO4l8DEENzOKc4aBRwxCXSlJXGz83flFx5L7AWrOQnmuN3kVsRdt+GZPPjiVQ==", + "deprecated": "This is a stub types definition for axios (https://github.com/mzabriskie/axios). axios provides its own type definitions, so you don't need @types/axios installed!", + "dev": true, + "dependencies": { + "axios": "*" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -1288,12 +1324,23 @@ "@babel/types": "^7.20.7" } }, + "node_modules/@types/crypto-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@types/crypto-js/-/crypto-js-4.2.2.tgz", + "integrity": "sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==", + "dev": true + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/history": { + "version": "4.7.11", + "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -1303,14 +1350,12 @@ "node_modules/@types/prop-types": { "version": "15.7.12", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==", - "dev": true + "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" }, "node_modules/@types/react": { "version": "18.2.73", "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.73.tgz", "integrity": "sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA==", - "dev": true, "dependencies": { "@types/prop-types": "*", "csstype": "^3.0.2" @@ -1325,6 +1370,34 @@ "@types/react": "*" } }, + "node_modules/@types/react-input-mask": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/react-input-mask/-/react-input-mask-3.0.5.tgz", + "integrity": "sha512-vQ1x6ykwjDrDrJZq1zw5/uQ+nqGHUV6bWscsVZJ/qsNwNXWxZm7KRBHLJ5k6TQt3MHjhpoYHzPH6FwjVSZODHA==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/react-router": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*" + } + }, + "node_modules/@types/react-router-dom": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", + "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "dependencies": { + "@types/history": "^4.7.11", + "@types/react": "*", + "@types/react-router": "*" + } + }, "node_modules/@types/semver": { "version": "7.5.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", @@ -1644,6 +1717,11 @@ "node": ">=8" } }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, "node_modules/autoprefixer": { "version": "10.4.19", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.19.tgz", @@ -1681,6 +1759,16 @@ "postcss": "^8.1.0" } }, + "node_modules/axios": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", + "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1855,6 +1943,17 @@ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/commander": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", @@ -1890,6 +1989,11 @@ "node": ">= 8" } }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -1905,8 +2009,7 @@ "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, "node_modules/date-fns": { "version": "3.6.0", @@ -1940,6 +2043,14 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", @@ -2459,6 +2570,25 @@ "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -2475,6 +2605,19 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fraction.js": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", @@ -2686,6 +2829,14 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -2950,6 +3101,25 @@ "node": ">=8.6" } }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "9.0.3", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", @@ -3475,6 +3645,11 @@ } } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -3527,6 +3702,34 @@ "react": "^18.2.0" } }, + "node_modules/react-hook-form": { + "version": "7.52.1", + "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.52.1.tgz", + "integrity": "sha512-uNKIhaoICJ5KQALYZ4TOaOLElyM+xipord+Ha3crEFhTntdLvWZqVY49Wqd/0GiVCA/f9NjemLeiNPjG7Hpurg==", + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/react-hook-form" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17 || ^18 || ^19" + } + }, + "node_modules/react-input-mask": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/react-input-mask/-/react-input-mask-2.0.4.tgz", + "integrity": "sha512-1hwzMr/aO9tXfiroiVCx5EtKohKwLk/NT8QlJXHQ4N+yJJFyUuMT+zfTpLBwX/lK3PkuMlievIffncpMZ3HGRQ==", + "dependencies": { + "invariant": "^2.2.4", + "warning": "^4.0.2" + }, + "peerDependencies": { + "react": ">=0.14.0", + "react-dom": ">=0.14.0" + } + }, "node_modules/react-refresh": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", @@ -3536,6 +3739,36 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.23.1.tgz", + "integrity": "sha512-fzcOaRF69uvqbbM7OhvQyBTFDVrrGlsFdS3AL+1KfIBtGETibHzi3FkoTRyiDJnWNc2VxrfvR+657ROHjaNjqQ==", + "dependencies": { + "@remix-run/router": "1.16.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.23.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.23.1.tgz", + "integrity": "sha512-utP+K+aSTtEdbWpC+4gxhdlPFwuEfDKq8ZrPFU65bbRJY+l706qjR7yaidBpo3MSeA/fzwbXWbKBI6ftOnP3OQ==", + "dependencies": { + "@remix-run/router": "1.16.1", + "react-router": "6.23.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, "node_modules/read-cache": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", @@ -4184,6 +4417,14 @@ } } }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index 46bee9f..66bc85f 100644 --- a/package.json +++ b/package.json @@ -5,19 +5,29 @@ "type": "module", "scripts": { "dev": "vite", - "build": "tsc && vite build", + "build": "vite build", "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", "preview": "vite preview" }, "dependencies": { + "@hookform/resolvers": "^3.9.0", + "@types/react-router-dom": "^5.3.3", + "axios": "^1.7.2", + "crypto-js": "^4.2.0", "date-fns": "^3.6.0", "react": "^18.2.0", "react-dom": "^18.2.0", + "react-hook-form": "^7.52.1", + "react-input-mask": "^2.0.4", + "react-router-dom": "^6.23.1", "swiper": "^11.1.0" }, "devDependencies": { + "@types/axios": "^0.14.0", + "@types/crypto-js": "^4.2.2", "@types/react": "^18.2.66", "@types/react-dom": "^18.2.22", + "@types/react-input-mask": "^3.0.5", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "@vitejs/plugin-react": "^4.2.1", diff --git a/public/favicon-16x16.png b/public/favicon-16x16.png new file mode 100644 index 0000000..ae5a3cd Binary files /dev/null and b/public/favicon-16x16.png differ diff --git a/public/favicon-32x32.png b/public/favicon-32x32.png new file mode 100644 index 0000000..05fba54 Binary files /dev/null and b/public/favicon-32x32.png differ diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..b73cb02 Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/open-graph-tlc-logo.png b/public/open-graph-tlc-logo.png new file mode 100644 index 0000000..20c2756 Binary files /dev/null and b/public/open-graph-tlc-logo.png differ diff --git a/public/tlc_simbolo_branco.png b/public/tlc_simbolo_branco.png deleted file mode 100644 index 6660ef9..0000000 Binary files a/public/tlc_simbolo_branco.png and /dev/null differ diff --git a/src/@types/global.d.ts b/src/@types/global.d.ts new file mode 100644 index 0000000..76015ea --- /dev/null +++ b/src/@types/global.d.ts @@ -0,0 +1,5 @@ +interface Window { + dataLayer: { + push: (params: { event: string; [key: string]: string | number }) => void + } +} diff --git a/src/App.tsx b/src/App.tsx index e730d35..066de7e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,27 +1,5 @@ -import CommunityMembers from './components/community-members/community-members' -import Companies from './components/companies/companies' -import Footer from './components/footer/footer' -import Header from './components/header/header' -import Learn from './components/learn/learn' -import Modules from './components/modules/modules' -import Prices from './components/prices/prices' -import Teachers from './components/teachers/teachers' -import TechLeadsCommunity from './components/tl-community/tl-community' +import Routes from './routes' -function App() { - return ( -
-
- - - - - - - -
- ) +export default function App() { + return } - -export default App diff --git a/src/assets/icons/github.svg b/src/assets/icons/github.svg new file mode 100644 index 0000000..94fa567 --- /dev/null +++ b/src/assets/icons/github.svg @@ -0,0 +1,17 @@ + + + + + team-collaboration/version-control/github + Created with Sketch. + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/instagram.svg b/src/assets/icons/instagram.svg new file mode 100644 index 0000000..7042411 --- /dev/null +++ b/src/assets/icons/instagram.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/assets/icons/linkedin.svg b/src/assets/icons/linkedin.svg new file mode 100644 index 0000000..4189f99 --- /dev/null +++ b/src/assets/icons/linkedin.svg @@ -0,0 +1,6 @@ + + + +linkedin + + \ No newline at end of file diff --git a/src/assets/icons/youtube.svg b/src/assets/icons/youtube.svg new file mode 100644 index 0000000..b5d1964 --- /dev/null +++ b/src/assets/icons/youtube.svg @@ -0,0 +1,15 @@ + + + + youtube + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/waldemar.jpg b/src/assets/waldemar.jpg index e0e9917..6b2859b 100644 Binary files a/src/assets/waldemar.jpg and b/src/assets/waldemar.jpg differ diff --git a/src/assets/willian.jpg b/src/assets/willian.jpg index 66424e2..348908f 100644 Binary files a/src/assets/willian.jpg and b/src/assets/willian.jpg differ diff --git a/src/assets/youtube.jpg b/src/assets/youtube.jpg index ca475b7..02e6ea6 100644 Binary files a/src/assets/youtube.jpg and b/src/assets/youtube.jpg differ diff --git a/src/components/companies/companies.tsx b/src/components/companies/companies.tsx index 6f8a0da..8dfbb96 100644 --- a/src/components/companies/companies.tsx +++ b/src/components/companies/companies.tsx @@ -2,7 +2,10 @@ import AtlassianLogo from '../../assets/atlassian_logo.jpg' import MeltwaterLogo from '../../assets/meltwater_logo.jpg' import ThoughtworksLogo from '../../assets/thoughtworks_logo.jpg' -const Companies = () => { +type props = { + renderLastPhrase?: boolean +} +const Companies = (props: props) => { return (

@@ -25,15 +28,17 @@ const Companies = () => { alt='Logotipo da thoughtworks' /> -

-

- E UMA COMUNIDADE{' '} - INTEIRA COM PESSOAS QUE TEM A MISSÃO{' '} - - DE ENTREGAR VALOR COM QUALIDADE! - -

-
+ {props.renderLastPhrase === false || ( +
+

+ E UMA COMUNIDADE{' '} + INTEIRA COM PESSOAS QUE TEM A MISSÃO{' '} + + DE ENTREGAR VALOR COM QUALIDADE! + +

+
+ )}
) } diff --git a/src/components/firstPage/firstPage.tsx b/src/components/firstPage/firstPage.tsx new file mode 100644 index 0000000..c1386d1 --- /dev/null +++ b/src/components/firstPage/firstPage.tsx @@ -0,0 +1,70 @@ +import LeftFirstPage from '../forms-sign-in' +import TlcLogo from '../icons/logo-tlc/tlc-logo' +import YoutubeVideo from './youtube-embed' + +function FirstPage() { + return ( +
+
+
+ + + +
+
+ +
+
+

+ WORKSHOP ARQUITETURAS EVOLUTIVAS E MODULARES NA PRÁTICA. +

+
+ +

+ Aprenda os fundamentos para construir software de qualquer porte de + forma eficiente. +

+
+ +
+
+ +
+
+ +
+
+ +
+

+ Aprenda a evitar overengineering e tirar o melhor proveito de linguagens, Frameworks, DDD, Arquitetura Hexagonal, + Arquitetura Limpa, Módulos e Microsserviços{' '} + + e crie soluções que entregam valor com menos complexidade. + {' '} +

+ +

+ APRENDA OS PRINCIPIOS PARA EVOLUIR A SUA ARQUITETURA! +

+ +

+ É claro que esses padrões são fundamentais mas isso não significa que + existam balas de prata ou que existe a “maneira certa”, “arquitetura + certa” ou o “jeito certo”. Tudo depende do contexto e o mais + importante é o processo evolutivo e a tomada de decisão. +

+ +

+ Nesse workshop você vai aprender como utilizar os conceitos de + Arquitetura Evolutiva e Modular para desenvolver projetos de qualquer + porte, tirando o melhor proveito de cada padrão no{' '} + momento certo e se + tornar um líder técnico eficiente. +

+
+
+ ) +} + +export default FirstPage diff --git a/src/components/firstPage/youtube-embed.tsx b/src/components/firstPage/youtube-embed.tsx new file mode 100644 index 0000000..c8b39ba --- /dev/null +++ b/src/components/firstPage/youtube-embed.tsx @@ -0,0 +1,20 @@ +interface IYoutubeVideoProps { + embedId: string +} + +const YoutubeVideo = ({ embedId }: IYoutubeVideoProps) => { + return ( +
+ +
+ ) +} + +export default YoutubeVideo diff --git a/src/components/forms-sign-in/index.tsx b/src/components/forms-sign-in/index.tsx new file mode 100644 index 0000000..6bd639c --- /dev/null +++ b/src/components/forms-sign-in/index.tsx @@ -0,0 +1,147 @@ +import InputMask from 'react-input-mask' +import { useForm, SubmitHandler } from 'react-hook-form' +import { sendRequest_form } from '../../services/sendRequest' +import { sha256, track } from '../../services/gtm'; +import { useState } from 'react'; + +export type IInputs = { name: string; email: string; phone: string } +export default function LeftFirstPage() { + const { + register, + handleSubmit, + formState: { errors }, + } = useForm() + + const [stateButton, setStateButton] = useState(false); + + const onSubmit: SubmitHandler = async (data) => { + setStateButton(true); + const { name, email, phone } = data + const body: IInputs = { + name, + email, + phone: phone.replace(/[^0-9]/g, ''), + } + + await sendRequest_form( + 'https://hook.us1.make.com/xacot799yr3z3308gb6rp08pydyugggt', + body + ) + + track({ + event: 'user_joined_wait_list', + email: sha256(email.trim().toLowerCase()) + }) + + window.location.href = 'https://chat.whatsapp.com/JQAfi1m8Mo7HzgZP0rx4dM' + } + + return ( +
+
+
+
+

+ Receba acesso ao meu workshop gratuitamente +

+

Conteudo inédito e exclusivo!

+
+
+
+

+ Preencha o formulário agora e se prepare para +

+

aprender a escrever software de qualidade!

+
+ {errors?.name && ( +

+ {errors.name.message} +

+ )} +
+ +
+ + {errors?.email && ( +

+ {errors.email.message} +

+ )} +
+ +
+ + {errors?.phone && ( +

+ {errors.phone.message} +

+ )} +
+ +
+ +
+ +
+
+
+
+
+
+
+
+
+ ) +} diff --git a/src/components/header/header.tsx b/src/components/header/header.tsx index 9faff03..b976afa 100644 --- a/src/components/header/header.tsx +++ b/src/components/header/header.tsx @@ -5,10 +5,15 @@ import YoutubeVideo from './youtube-embed' function Header() { return (
-
- +
+
+
+ + + +
+
-

@@ -27,8 +32,8 @@ function Header() {

-
- +
+
diff --git a/src/components/icons/LineCircle.tsx b/src/components/icons/LineCircle.tsx index 47cd24a..e9e615b 100644 --- a/src/components/icons/LineCircle.tsx +++ b/src/components/icons/LineCircle.tsx @@ -1,11 +1,10 @@ - const LineCircle = () => { return ( { transform='translate(126.186853 9.999998)' fill='none' stroke='#707070' - stroke-width='2' - stroke-opacity='0.2' + strokeWidth='2' + strokeOpacity='0.2' /> { transform='matrix(1 0 0 0.892671 820 10)' fill='none' stroke='#707070' - stroke-width='0.7' - stroke-opacity='0.2' + strokeWidth='0.7' + strokeOpacity='0.2' /> ) diff --git a/src/components/learn/learn.tsx b/src/components/learn/learn.tsx index 47b51a1..ed85e4e 100644 --- a/src/components/learn/learn.tsx +++ b/src/components/learn/learn.tsx @@ -16,23 +16,23 @@ const learnTexts = [ }, { photo: DecisionPhoto, - text: 'Tomar decisões técnicas efetivas e liderar.', + text: 'Como tomar decisões técnicas chave para a arquitetura.', }, { photo: VersusPhoto, - text: 'Monolito vs Microsserviço vs Arquitetura', + text: 'Monolito vs Microsserviço vs Arquitetura Modular.', }, { photo: UnitTestPhoto, - text: 'Testes de unidade, integração e ponta a ponta.', + text: 'Testes e qualidade.', }, { photo: ArchitecturePhoto, - text: 'Arquitetura modular em grande escala', + text: 'Arquitetura Modular em grande escala', }, { photo: PatternsPhoto, - text: 'Padrões de arquitetura enterprise e quando adotar DDD, Hexagonal', + text: 'Padrões de arquitetura enterprise como DDD, Arquitetura Hexagonal e Arquitetura Limpa.', }, ] diff --git a/src/components/modules/modules.tsx b/src/components/modules/modules.tsx index a6c1796..b30d0aa 100644 --- a/src/components/modules/modules.tsx +++ b/src/components/modules/modules.tsx @@ -1,40 +1,13 @@ -const dataModules = [ - { - name: 'FUNDAMENTOS DE CONSTRUÇÃO DE SOFTWARE ENTERPRISE', - topics: [ - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - ], - }, - { - name: 'ARQUITETURA MODULAR EM ESCALA', - topics: [ - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - ], - }, - { - name: 'MANTENDO SOFTWARE EM PRODUÇÃO', - topics: [ - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - 'Bla bla bla bla', - ], - }, -] -const Modules = () => { +type module= { name: string, topics: string[] } +type props= { + modules: module[] + +} +const Modules = ({modules}:props) => { return (
- {dataModules.map((module) => ( + {modules.map((module) => (
{ return ( -
+

COM QUEM VOCÊ VAI APRENDER

- {teachersData.map((teacher) => ( + {teachersData.map((teacher, index) => (
@@ -52,9 +64,33 @@ const Teachers = () => {

{teacher.name}

-

+

{teacher.subtitle}

+
+ {teacher.linkedin_url && ( + + + + )} + {teacher.instagram_url && ( + + + + )} + {teacher.youtube_url && ( + + + + )} + {teacher.github_url && ( + +
+ +
+
+ )} +

{teacher.description}

@@ -64,7 +100,7 @@ const Teachers = () => { ))}
-

TEXTO SOBRE AS IMAGENS

+

+
+ + + + + + + +