This commit is contained in:
Julian Tölle 2021-03-21 00:15:22 +01:00
parent 42ec5539dc
commit b536ee4124
23 changed files with 8696 additions and 223 deletions

3
.babelrc Normal file
View file

@ -0,0 +1,3 @@
{
"presets": ["next/babel"]
}

3
.eslintignore Normal file
View file

@ -0,0 +1,3 @@
**/node_modules/*
**/out/*
**/.next/*

49
.eslintrc.json Normal file
View file

@ -0,0 +1,49 @@
{
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:react/recommended",
"plugin:react-hooks/recommended",
"plugin:jsx-a11y/recommended",
"prettier"
],
"env": {
"es6": true,
"browser": true,
"jest": true,
"node": true
},
"settings": {
"react": {
"version": "detect"
}
},
"rules": {
"react/react-in-jsx-scope": 0,
"react/display-name": 0,
"react/prop-types": 0,
"@typescript-eslint/explicit-function-return-type": 0,
"@typescript-eslint/explicit-member-accessibility": 0,
"@typescript-eslint/explicit-module-boundary-types": 0,
"@typescript-eslint/indent": 0,
"@typescript-eslint/member-delimiter-style": 0,
"@typescript-eslint/no-explicit-any": 0,
"@typescript-eslint/no-var-requires": 0,
"@typescript-eslint/no-use-before-define": 0,
"@typescript-eslint/no-unused-vars": [
2,
{
"argsIgnorePattern": "^_"
}
],
"no-console": [
2,
{
"allow": ["warn", "error"]
}
],
"jsx-a11y/anchor-is-valid": "off"
}
}

5
.prettierignore Normal file
View file

@ -0,0 +1,5 @@
node_modules
.next
yarn.lock
package-lock.json
public

11
components/Footer.tsx Normal file
View file

@ -0,0 +1,11 @@
import Link from "next/link";
export const Footer = () => {
return (
<div>
<Link href="/imprint">
<a>Impressum & Datenschutz</a>
</Link>
</div>
);
};

27
components/Nav.tsx Normal file
View file

@ -0,0 +1,27 @@
import Link from "next/link";
export const Nav = () => {
// flex items-center justify-around mt-4 mb-4
return (
<ul className="m-4 text-center justify-center">
<NavLink href="/#intro" text="Einführung" />
<NavLink href="/#heroes" text="Unsere Helden" />
<NavLink href="/#listen" text="Hörprobe" />
<NavLink href="/buy" text="Kaufen" />
</ul>
);
};
function NavLink(props: { href: string; text: string }) {
const { href, text } = props;
return (
<li className="block w-1/2 bg-amber-800">
<Link href={href}>
<a className="text-gray-300 hover:text-amber-200 focus:text-amber-200 focus:outline-none transition">
{text}
</a>
</Link>
</li>
);
}

2
next-env.d.ts vendored Normal file
View file

@ -0,0 +1,2 @@
/// <reference types="next" />
/// <reference types="next/types/global" />

8401
package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -5,11 +5,52 @@
"scripts": { "scripts": {
"dev": "next dev", "dev": "next dev",
"build": "next build", "build": "next build",
"start": "next start" "start": "next start",
"type-check": "tsc --pretty --noEmit",
"format": "prettier --write .",
"lint": "eslint . --ext ts --ext tsx --ext js",
"test": "jest --passWithNoTests",
"test-all": "npm run lint && npm run type-check && npm run test"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged",
"pre-push": "npm run type-check"
}
},
"lint-staged": {
"*.@(ts|tsx)": [
"npm run lint",
"npm run format"
]
}, },
"dependencies": { "dependencies": {
"next": "10.0.8", "next": "10.0.8",
"react": "17.0.1", "react": "17.0.1",
"react-dom": "17.0.1" "react-dom": "17.0.1"
},
"devDependencies": {
"@testing-library/react": "^11.2.5",
"@types/jest": "^26.0.20",
"@types/node": "^14.14.34",
"@types/react": "^17.0.3",
"@typescript-eslint/eslint-plugin": "^4.17.0",
"@typescript-eslint/parser": "^4.17.0",
"autoprefixer": "^10.2.5",
"babel-jest": "^26.6.3",
"eslint": "^7.22.0",
"eslint-config-prettier": "^8.1.0",
"eslint-plugin-jsx-a11y": "^6.4.1",
"eslint-plugin-react": "^7.22.0",
"eslint-plugin-react-hooks": "^4.2.0",
"husky": "^5.1.3",
"identity-obj-proxy": "^3.0.0",
"jest": "^26.6.3",
"jest-watch-typeahead": "^0.6.1",
"lint-staged": "^10.5.4",
"postcss": "^8.2.8",
"prettier": "~2.2.1",
"tailwindcss": "^2.0.3",
"typescript": "^4.2.3"
} }
} }

View file

@ -1,7 +0,0 @@
import '../styles/globals.css'
function MyApp({ Component, pageProps }) {
return <Component {...pageProps} />
}
export default MyApp

29
pages/_app.tsx Normal file
View file

@ -0,0 +1,29 @@
import { AppProps } from "next/app";
import Head from "next/head";
import { Footer } from "../components/Footer";
import { Header } from "../components/Header";
import { Nav } from "../components/Nav";
import "../styles/globals.css";
function MyApp({ Component, pageProps }: AppProps) {
return (
<div>
<Head>
<title>Hörspiel2021</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<header>
<Header />
</header>
<nav>
<Nav />
</nav>
<Component {...pageProps} />
<footer>
<Footer />
</footer>
</div>
);
}
export default MyApp;

17
pages/_document.tsx Normal file
View file

@ -0,0 +1,17 @@
import Document, { Html, Head, Main, NextScript } from "next/document";
class MyDocument extends Document {
render() {
return (
<Html lang="de-DE">
<Head />
<body className="bg-gray-900">
<Main />
<NextScript />
</body>
</Html>
);
}
}
export default MyDocument;

View file

@ -1,5 +0,0 @@
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
export default (req, res) => {
res.status(200).json({ name: 'John Doe' })
}

3
pages/buy.tsx Normal file
View file

@ -0,0 +1,3 @@
export default function Buy() {
return <div>Jetzt kaufen</div>;
}

5
pages/imprint.tsx Normal file
View file

@ -0,0 +1,5 @@
export default function Imprint() {
return (
<div className="bg-amber-100 text-blue-900">Impressum & Datenschutz</div>
);
}

View file

@ -1,65 +0,0 @@
import Head from 'next/head'
import styles from '../styles/Home.module.css'
export default function Home() {
return (
<div className={styles.container}>
<Head>
<title>Create Next App</title>
<link rel="icon" href="/favicon.ico" />
</Head>
<main className={styles.main}>
<h1 className={styles.title}>
Welcome to <a href="https://nextjs.org">Next.js!</a>
</h1>
<p className={styles.description}>
Get started by editing{' '}
<code className={styles.code}>pages/index.js</code>
</p>
<div className={styles.grid}>
<a href="https://nextjs.org/docs" className={styles.card}>
<h3>Documentation &rarr;</h3>
<p>Find in-depth information about Next.js features and API.</p>
</a>
<a href="https://nextjs.org/learn" className={styles.card}>
<h3>Learn &rarr;</h3>
<p>Learn about Next.js in an interactive course with quizzes!</p>
</a>
<a
href="https://github.com/vercel/next.js/tree/master/examples"
className={styles.card}
>
<h3>Examples &rarr;</h3>
<p>Discover and deploy boilerplate example Next.js projects.</p>
</a>
<a
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
className={styles.card}
>
<h3>Deploy &rarr;</h3>
<p>
Instantly deploy your Next.js site to a public URL with Vercel.
</p>
</a>
</div>
</main>
<footer className={styles.footer}>
<a
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Powered by{' '}
<img src="/vercel.svg" alt="Vercel Logo" className={styles.logo} />
</a>
</footer>
</div>
)
}

54
pages/index.tsx Normal file
View file

@ -0,0 +1,54 @@
export default function Home() {
return (
<div className="flex flex-col items-center justify-center min-h-screen py-2">
<header></header>
<main className="flex flex-col items-center justify-center flex-1 px-20 text-center">
<h1 className="text-6xl font-bold">
Welcome to{" "}
<a href="https://nextjs.org" className="text-blue-600">
Next.js!
</a>
</h1>
<p>
Get started by editing <code>pages/index.js</code>
</p>
<div>
<a href="https://nextjs.org/docs">
<h3>Documentation &rarr;</h3>
<p>Find in-depth information about Next.js features and API.</p>
</a>
<a href="https://nextjs.org/learn">
<h3>Learn &rarr;</h3>
<p>Learn about Next.js in an interactive course with quizzes!</p>
</a>
<a href="https://github.com/vercel/next.js/tree/master/examples">
<h3>Examples &rarr;</h3>
<p>Discover and deploy boilerplate example Next.js projects.</p>
</a>
<a href="https://vercel.com/new?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app">
<h3>Deploy &rarr;</h3>
<p>
Instantly deploy your Next.js site to a public URL with Vercel.
</p>
</a>
</div>
</main>
<footer>
<a
href="https://vercel.com?utm_source=create-next-app&utm_medium=default-template&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
Powered by <img src="/vercel.svg" alt="Vercel Logo" />
</a>
</footer>
</div>
);
}

6
postcss.config.js Normal file
View file

@ -0,0 +1,6 @@
module.exports = {
plugins: {
tailwindcss: {},
autoprefixer: {},
},
}

4
public/placeholder.svg Normal file
View file

@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="150" viewBox="0 0 300 150">
<rect fill="#ddd" width="300" height="150"/>
<text fill="rgba(0,0,0,0.5)" font-family="sans-serif" font-size="30" dy="10.5" font-weight="bold" x="50%" y="50%" text-anchor="middle">Placeholder</text>
</svg>

After

Width:  |  Height:  |  Size: 297 B

View file

@ -1,122 +0,0 @@
.container {
min-height: 100vh;
padding: 0 0.5rem;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.main {
padding: 5rem 0;
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
}
.footer {
width: 100%;
height: 100px;
border-top: 1px solid #eaeaea;
display: flex;
justify-content: center;
align-items: center;
}
.footer img {
margin-left: 0.5rem;
}
.footer a {
display: flex;
justify-content: center;
align-items: center;
}
.title a {
color: #0070f3;
text-decoration: none;
}
.title a:hover,
.title a:focus,
.title a:active {
text-decoration: underline;
}
.title {
margin: 0;
line-height: 1.15;
font-size: 4rem;
}
.title,
.description {
text-align: center;
}
.description {
line-height: 1.5;
font-size: 1.5rem;
}
.code {
background: #fafafa;
border-radius: 5px;
padding: 0.75rem;
font-size: 1.1rem;
font-family: Menlo, Monaco, Lucida Console, Liberation Mono, DejaVu Sans Mono,
Bitstream Vera Sans Mono, Courier New, monospace;
}
.grid {
display: flex;
align-items: center;
justify-content: center;
flex-wrap: wrap;
max-width: 800px;
margin-top: 3rem;
}
.card {
margin: 1rem;
flex-basis: 45%;
padding: 1.5rem;
text-align: left;
color: inherit;
text-decoration: none;
border: 1px solid #eaeaea;
border-radius: 10px;
transition: color 0.15s ease, border-color 0.15s ease;
}
.card:hover,
.card:focus,
.card:active {
color: #0070f3;
border-color: #0070f3;
}
.card h3 {
margin: 0 0 1rem 0;
font-size: 1.5rem;
}
.card p {
margin: 0;
font-size: 1.25rem;
line-height: 1.5;
}
.logo {
height: 1em;
}
@media (max-width: 600px) {
.grid {
width: 100%;
flex-direction: column;
}
}

View file

@ -1,16 +1,3 @@
html, @tailwind base;
body { @tailwind components;
padding: 0; @tailwind utilities;
margin: 0;
font-family: -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Oxygen,
Ubuntu, Cantarell, Fira Sans, Droid Sans, Helvetica Neue, sans-serif;
}
a {
color: inherit;
text-decoration: none;
}
* {
box-sizing: border-box;
}

20
tailwind.config.js Normal file
View file

@ -0,0 +1,20 @@
const colors = require("tailwindcss/colors");
module.exports = {
purge: ["./pages/**/*.{js,ts,jsx,tsx}", "./components/**/*.{js,ts,jsx,tsx}"],
darkMode: false, // or 'media' or 'class'
theme: {
colors: {
transparent: "transparent",
current: "currentColor",
gray: colors.blueGray,
amber: colors.amber,
blue: colors.fuchsia,
},
extend: {},
},
variants: {
extend: {},
},
plugins: [],
};

19
tsconfig.json Normal file
View file

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