This commit is contained in:
Filipe Medeiros 2022-08-21 01:12:00 +01:00
parent b8071933b3
commit 9dac46970f
38 changed files with 1283 additions and 3442 deletions

View file

@ -1,3 +0,0 @@
{
"extends": ["next/core-web-vitals", "prettier"]
}

35
.gitignore vendored
View file

@ -1,34 +1 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
/node_modules
/.pnp
.pnp.js
# testing
/coverage
# next.js
/.next/
/out/
# production
/build
# misc
.DS_Store
*.pem
# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# local env files
.env.local
.env.development.local
.env.test.local
.env.production.local
# vercel
.vercel
node_modules

View file

@ -1,31 +0,0 @@
#!/bin/sh
if [ -z "$husky_skip_init" ]; then
debug () {
if [ "$HUSKY_DEBUG" = "1" ]; then
echo "husky (debug) - $1"
fi
}
readonly hook_name="$(basename "$0")"
debug "starting $hook_name..."
if [ "$HUSKY" = "0" ]; then
debug "HUSKY env variable is set to 0, skipping hook"
exit 0
fi
if [ -f ~/.huskyrc ]; then
debug "sourcing ~/.huskyrc"
. ~/.huskyrc
fi
export readonly husky_skip_init=1
sh -e "$0" "$@"
exitCode="$?"
if [ $exitCode != 0 ]; then
echo "husky - $hook_name hook exited with code $exitCode (error)"
fi
exit $exitCode
fi

View file

@ -1,4 +0,0 @@
#!/bin/sh
. "$(dirname "$0")/_/husky.sh"
yarn lint:staged

View file

@ -1,3 +0,0 @@
{
"*": "yarn prettier --write"
}

6
.postcssrc Normal file
View file

@ -0,0 +1,6 @@
{
"plugins": {
"tailwindcss": {},
"autoprefixer": {}
}
}

View file

@ -1,5 +0,0 @@
.husky
.prettierignore
.gitignore
yarn.lock
node-modules

View file

@ -1,10 +0,0 @@
{
"arrowParens": "avoid",
"semi": false,
"singleQuote": true,
"plugins": ["./node_modules/@trivago/prettier-plugin-sort-imports"],
"importOrder": ["<THIRD_PARTY_MODULES>", "^[./]"],
"importOrderSeparation": true,
"importOrderSortSpecifiers": true
}

64
.vscode/settings.json vendored
View file

@ -1,64 +0,0 @@
{
"editor.fontSize": 15,
"terminal.integrated.fontSize": 15,
"workbench.panel.defaultLocation": "right",
"editor.suggestSelection": "first",
"[typescriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.detectIndentation": false,
"[json]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"files.associations": {
"*.ts.dev.ffencrypted": "typescript",
"*.ts.prd.we1.ffencrypted": "typescript",
".env.*": "env",
".*rc": "json"
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"workbench.editor.wrapTabs": true,
"workbench.editor.decorations.colors": true,
"workbench.editor.decorations.badges": true,
"git.autofetch": true,
"git.autofetchPeriod": 300,
"diffEditor.ignoreTrimWhitespace": false,
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"editor.inlineSuggest.enabled": true,
"javascript.format.placeOpenBraceOnNewLineForControlBlocks": true,
"javascript.format.placeOpenBraceOnNewLineForFunctions": true,
"typescript.format.placeOpenBraceOnNewLineForControlBlocks": true,
"typescript.format.placeOpenBraceOnNewLineForFunctions": true,
"typescript.updateImportsOnFileMove.enabled": "always",
"editor.defaultFormatter": "esbenp.prettier-vscode",
"window.zoomLevel": 0,
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
"eslint.format.enable": true,
"eslint.packageManager": "yarn",
"eslint.alwaysShowStatus": true,
"editor.foldingImportsByDefault": true,
"javascript.preferences.importModuleSpecifier": "project-relative",
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": [
"javascript",
"javascriptreact",
"typescript",
"typescriptreact"
]
}

View file

@ -1,29 +1,13 @@
# next.js app starter template
#Quick starter template
this is a template repo for starting a next.js app fast and efficiently.
**Parcel + tailwindcss v3 + AlpineJs**
for the app it uses:
--------------------------------
1. 🚀 [next.js](https://nextjs.org/) (duh)
2. 💅 [tailwindcss](https://tailwindcss.com/)
##Install
for development it uses:
`npm install`
1. 👕 [typescript](https://www.typescriptlang.org/)
2. ✨ [hygen](https://www.hygen.io/)
##Run
## how to use
use github's "use this template" feature.
i recommend deploying to vercel, initially. you should decide based on your case! :)
## why
i needed to stop repeating myself everytime i wanted to bootstrap a new project. this seems like a good base for every type of project. i tried not to be intrusive with the stack chosen.
you can start with tw and remove it later if you don't like it (replace it for something like [stiches](https://stitches.dev/))
## preview
[![open in stackblitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/filipesmedeiros/next-app-template)
`npm start`

View file

@ -1,24 +0,0 @@
---
to: pages/api/<%= name %>.ts
---
import type { NextApiHandler } from 'next'
import checkToken from '@lib/middlewares/checkToken'
// remove if not needed
export type ResponseBody = any // change to correct type
const handler: NextApiHandler<ResponseBody> = (req, res) => {
try {
checkToken(req, res)
// handle request
} catch {
res.redirect('/login')
}
}
export default handler

View file

@ -1,15 +0,0 @@
---
to: components/<%= name %>.tsx
---
import type { FC } from 'react'
// delete if not needed
export interface Props {
// your props here
}
const <%= componentName %>: FC<Props> = ({ children }) => {
return <>{children}</>
}
export default <%= componentName %>

View file

@ -1,10 +0,0 @@
module.exports = {
params: ({ args }) => {
const nameSplit = args.name.split('/')
let componentName = nameSplit[nameSplit.length - 1]
componentName = `${componentName[0].toLocaleUpperCase()}${componentName.slice(
1
)}`
return { ...args, componentName }
},
}

View file

@ -1,13 +0,0 @@
---
to: lib/hooks/<%= name %>.ts
---
import { use } from 'react'
const <%= name %> = () => {
}
export default <%= name %>

View file

@ -1,10 +0,0 @@
module.exports = {
params: ({ args }) => {
const nameSplit = args.name.split('/')
let componentName = nameSplit[nameSplit.length - 1]
componentName = `${componentName[0].toLocaleUpperCase()}${componentName.slice(
1
)}`
return { ...args, componentName }
},
}

View file

@ -1,10 +0,0 @@
---
to: pages/<%= name %>.tsx
---
import type { NextPage } from 'next'
const <%= componentName %>: NextPage = () => {
return <></>
}
export default <%= componentName %>

View file

@ -1,25 +0,0 @@
import Link from 'next/link'
import { useRouter } from 'next/router'
import type { FC } from 'react'
const Header: FC = () => {
const { pathname } = useRouter()
return (
<header className="w-full px-40 py-20">
<nav className="flex w-full justify-between">
<Link href="/">
<a className={pathname === '/' ? 'text-green' : ''}>work</a>
</Link>
<Link href="/about">
<a className={pathname === '/about' ? 'text-green' : ''}>about</a>
</Link>
<Link href="/contact">
<a className={pathname === '/contact' ? 'text-green' : ''}>contact</a>
</Link>
</nav>
</header>
)
}
export default Header

5
next-env.d.ts vendored
View file

@ -1,5 +0,0 @@
/// <reference types="next" />
/// <reference types="next/image-types/global" />
// NOTE: This file should not be edited
// see https://nextjs.org/docs/basic-features/typescript for more information.

View file

@ -1,57 +1,18 @@
{
"license": "MIT",
"private": false,
"engines": {
"node": ">12"
},
"name": "starter",
"source": "src/index.html",
"scripts": {
"dev": "next dev",
"build": "next build",
"start": "next start",
"test": "echo TODO",
"lint": "next lint",
"lint:staged": "lint-staged",
"format": "prettier --write .",
"gen:component": "hygen component new",
"gen:apiHandler": "hygen apiHandler new",
"gen:page": "hygen page new",
"gen:hook": "hygen hook new"
},
"dependencies": {
"clsx": "^1.2.1",
"next": "^12.1.6",
"prettier": "^2.7.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
"start": "parcel",
"build": "parcel build"
},
"devDependencies": {
"@trivago/prettier-plugin-sort-imports": "^3.2.0",
"@types/node": "^16.11.41",
"@types/react": "^18.0.14",
"@types/react-dom": "^18.0.5",
"@typescript-eslint/parser": "^5.28.0",
"autoprefixer": "^10.4.7",
"eslint": "8.4.1",
"eslint-config-next": "^12.1.6",
"eslint-config-prettier": "^8.5.0",
"husky": "^7.0.4",
"hygen": "^6.2.7",
"lint-staged": "^12.5.0",
"postcss": "^8.4.14",
"prettier-eslint": "^13.0.0",
"tailwindcss": "^3.1.3",
"typescript": "^4.7.4"
"autoprefixer": "^10.4.2",
"parcel": "latest",
"postcss": "^8.4.6",
"tailwindcss": "^3.0.22"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
"dependencies": {
"alpinejs": "^3.9.0",
"prettier": "^2.5.1"
}
}

View file

@ -1,56 +0,0 @@
import clsx from 'clsx'
import type { AppProps } from 'next/app'
import Image from 'next/image'
import { useRouter } from 'next/router'
import { FC } from 'react'
import 'tailwindcss/tailwind.css'
import Header from '../components/Header'
import '../styles/global.css'
const MyApp: FC<AppProps> = ({ Component, pageProps }) => {
const { pathname } = useRouter()
return (
<div className="flex flex-col min-h-screen">
<Header />
<main className="flex flex-col items-center w-full flex-1 px-40 text-center">
<Component {...pageProps} />
</main>
<footer
className={clsx(
'grid grid-cols-3 w-full px-40 font-light text-sm items-center py-8 justify-between',
pathname === '/'
? 'bg-green'
: pathname === '/about'
? 'bg-blue'
: 'bg-orange'
)}
>
<div>
<span className="mr-2">To the top</span>
<Image
src="/arrow-up-white.svg"
height={15}
width={12}
alt="Arrow up icon"
/>
</div>
<div className="flex gap-10 justify-center">
<Image
src="/linkedin.png"
width={25}
height={25}
alt="LinkedIn logo"
/>
<Image src="/mail.png" width={35} height={25} alt="Mail icon" />
</div>
<div className="text-right">Luis Medeiros 2022 ©</div>
</footer>
</div>
)
}
export default MyApp

View file

@ -1,26 +0,0 @@
import Document, { Head, Html, Main, NextScript } from 'next/document'
class MyDocument extends Document {
render() {
return (
<Html>
<Head>
<link
href="https://fonts.googleapis.com/css2?family=Manrope:wght@300;400&display=swap"
rel="stylesheet"
/>
<link
href="https://fonts.googleapis.com/css2?family=Syne+Tactile&display=swap"
rel="stylesheet"
/>
</Head>
<body>
<Main />
<NextScript />
</body>
</Html>
)
}
}
export default MyDocument

View file

@ -1,59 +0,0 @@
import type { NextPage } from 'next'
import Head from 'next/head'
import Image from 'next/image'
const About: NextPage = () => {
return (
<>
<Head>
<title>Luis Medeiros</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<h1 className="text-7xl text-left font-light self-start mb-24">
Luis Medeiros,
<br />
<span className="font-syne">creative</span> strategist
<br />
<span className="text-blue">is</span>
</h1>
<h2 className="text-right self-end text-2xl w-5/6">
a young but well-versed creative strategist with a background in
copywriting amplified by four years of design thinking; experience
leading several branding & design projects; and an artistic adventure as
one-third of the indie pop band{' '}
<a href="https://ditch-days.com" className="text-blue underline">
Ditch Days
</a>
.
</h2>
<section className="w-full text-start mt-32">
<h2 className="text-4xl font-light items-end flex gap-3">
The journey so far
<Image
src="/arrow-down-blue.svg"
width={22}
height={29}
alt="Arrow down icon"
/>
</h2>
</section>
<section className="w-full text-start mt-32">
<h2 className="text-4xl font-light items-end flex gap-3">
Brand-dropping
<Image
src="/arrow-down-blue.svg"
width={22}
height={29}
alt="Arrow down icon"
/>
</h2>
</section>
</>
)
}
export default About

View file

@ -1,7 +0,0 @@
import type { NextApiHandler } from 'next'
const handler: NextApiHandler = (req, res) => {
res.status(200).json({ name: 'John Doe' })
}
export default handler

View file

@ -1,7 +0,0 @@
import type { NextPage } from 'next'
const Contact: NextPage = () => {
return <></>
}
export default Contact

View file

@ -1,29 +0,0 @@
import { NextPage } from 'next'
import Head from 'next/head'
const Home: NextPage = () => {
return (
<>
<Head>
<title>Luis Medeiros</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<h1 className="text-7xl text-left font-light self-start mb-24">
Luis Medeiros,
<br />
<span className="font-syne">creative</span> strategist
<br />
<span className="text-green">does</span>
</h1>
<h2 className="text-right self-end text-2xl">
<p>creative ideation & leadership / copywriting</p>
<p>brand strategy & identity / business strategy</p>
<p>co-creation workshops / organizational culture / music</p>
</h2>
</>
)
}
export default Home

File diff suppressed because it is too large Load diff

View file

@ -1,8 +0,0 @@
// If you want to use other PostCSS plugins, see the following:
// https://tailwindcss.com/docs/using-with-preprocessors
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

View file

@ -1,4 +0,0 @@
<svg width="29" height="35" viewBox="0 0 29 35" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M14.1779 0.0587158V32.3971" stroke="#267CFD" stroke-width="3.09965"/>
<path d="M1.1322 19.3516L14.1778 32.3972L27.2234 19.3516" stroke="#267CFD" stroke-width="3.09965"/>
</svg>

Before

Width:  |  Height:  |  Size: 282 B

View file

@ -1,4 +0,0 @@
<svg width="17" height="21" viewBox="0 0 17 21" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M8.25137 20.7678L8.25137 1.92949" stroke="white" stroke-width="1.80566"/>
<path d="M15.851 9.52905L8.25138 1.9295L0.651825 9.52905" stroke="white" stroke-width="1.80566"/>
</svg>

Before

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 688 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

3
src/css/styles.css Normal file
View file

@ -0,0 +1,3 @@
@tailwind base;
@tailwind components;
@tailwind utilities;

21
src/index.html Normal file
View file

@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>My App</title>
<link rel="stylesheet" href="./css/styles.css" />
</head>
<body class="flex items-center justify-center w-screen h-screen">
<div class="flex flex-col">
<p class="text-4xl text-blue-600">ready to code 🚀</p>
<div x-data="{ open: false }">
<button class="" @click="open = !open">
Click here to test alpine :
</button>
<span x-show="open"> it's working ✅</span>
</div>
</div>
<script src="./js/app.js" type="module"></script>
</body>
</html>

5
src/js/website.js Normal file
View file

@ -0,0 +1,5 @@
import Alpine from "alpinejs";
window.Alpine = Alpine;
Alpine.start();

View file

@ -1,8 +0,0 @@
body {
font-family: Manrope, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI',
Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
}
h1 {
color: #000;
}

View file

@ -1,30 +1,5 @@
module.exports = {
content: [
'./pages/**/*.{js,ts,jsx,tsx}',
'./components/**/*.{js,ts,jsx,tsx}',
],
darkMode: 'class',
theme: {
extend: {
fontFamily: {
manrope: ['Manrope', 'sans-serif'],
syne: ['Syne Tactile', 'serif'],
},
colors: {
green: {
DEFAULT: '#009966',
},
blue: {
DEFAULT: '#267CFD',
},
orange: {
DEFAULT: '#EC8E00',
},
},
},
},
variants: {
extend: {},
},
content: ["./src/**/*.{html,js}"],
theme: { extend: {} },
plugins: [],
}
};

View file

@ -1,20 +0,0 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": true,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"incremental": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve"
},
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"],
"exclude": ["node_modules"]
}