16
.drone.yml
@ -22,13 +22,15 @@ steps:
|
||||
port: 1312
|
||||
target: /srv/web/home
|
||||
sources:
|
||||
- ./dist
|
||||
- ./docker-compose.prod.yml
|
||||
- ./nginx.conf
|
||||
commands:
|
||||
- docker-compose -f docker-compose.prod.yml pull
|
||||
- docker-compose -f docker-compose.prod.yml down
|
||||
- docker-compose -f docker-compose.prod.yml up -d
|
||||
- ./Dockerfile
|
||||
- ./package.json
|
||||
- ./yarn.lock
|
||||
- ./next.config.js
|
||||
- ./.next
|
||||
- ./public
|
||||
commands:
|
||||
- docker-compose -f docker-compose.prod.yml build
|
||||
- docker-copmose -f docker-compose.prod.yml restart front
|
||||
when:
|
||||
event: push
|
||||
branch: master
|
11
.gitignore
vendored
@ -1,9 +1,10 @@
|
||||
# Node
|
||||
node_modules
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
public
|
||||
.cache
|
||||
dist
|
||||
|
||||
# Build
|
||||
.cache
|
||||
.next
|
||||
|
||||
# Editor
|
||||
.idea
|
||||
.vscode
|
9
Dockerfile
Normal file
@ -0,0 +1,9 @@
|
||||
FROM node:alpine
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json .
|
||||
COPY yarn.lock .
|
||||
RUN yarn
|
||||
|
||||
CMD [ "yarn", "run", "start" ]
|
@ -1,6 +1,10 @@
|
||||
import React, { useEffect, useState } from 'react'
|
||||
import { Duration } from '../App'
|
||||
import { GoldenRatio, Rand } from '../util'
|
||||
|
||||
import { Duration } from '../utils/config'
|
||||
import { GoldenRatio, Rand } from '../utils/utils'
|
||||
import '../styles/AnimatedBackground.styl'
|
||||
|
||||
|
||||
|
||||
type Color = [number, number, number]
|
||||
|
||||
@ -32,7 +36,7 @@ const AnimatedBackground: React.FC = () => {
|
||||
|
||||
return <div className={'animated-background'} style={{
|
||||
backgroundImage: valuesToGradient(direction, start, end),
|
||||
}}/>
|
||||
}} />
|
||||
}
|
||||
|
||||
export default AnimatedBackground
|
@ -1,5 +1,8 @@
|
||||
import React from 'react'
|
||||
import { useIsMousePresent, useMousePosition } from '../util'
|
||||
|
||||
import { useIsMousePresent, useMousePosition } from '../utils/hooks'
|
||||
|
||||
|
||||
|
||||
const Cursor: React.FC = () => {
|
||||
const mouse = useMousePosition()
|
||||
@ -15,7 +18,7 @@ const Cursor: React.FC = () => {
|
||||
borderRadius: '1em',
|
||||
transform: 'translate(-50%, -50%)',
|
||||
backgroundColor: '#000000',
|
||||
}}/>
|
||||
}} />
|
||||
: null
|
||||
}
|
||||
|
@ -1,6 +1,9 @@
|
||||
import anime from 'animejs'
|
||||
import React, { useEffect, useRef } from 'react'
|
||||
import { Duration } from '../App'
|
||||
|
||||
import { Duration } from '../utils/config'
|
||||
|
||||
|
||||
|
||||
export type LettersProps = {
|
||||
text: string
|
@ -1,5 +1,8 @@
|
||||
import React from 'react'
|
||||
import { useMousePosition, useOrientation } from '../util'
|
||||
|
||||
import { useMousePosition, useOrientation } from '../utils/hooks'
|
||||
|
||||
|
||||
|
||||
type RenderProps = {
|
||||
x: string,
|
15
components/staticText.tsx
Normal file
@ -0,0 +1,15 @@
|
||||
import React from 'react'
|
||||
|
||||
import '../styles/static.styl'
|
||||
|
||||
|
||||
|
||||
const StaticText: React.FC = ({ children }) => {
|
||||
return <div className={'static'}>
|
||||
<div className={'content'}>
|
||||
{children}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
export default StaticText
|
@ -1,19 +1,18 @@
|
||||
version: '3.7'
|
||||
|
||||
services:
|
||||
home:
|
||||
image: cupcakearmy/static
|
||||
front:
|
||||
build: .
|
||||
restart: always
|
||||
ports:
|
||||
- 80
|
||||
volumes:
|
||||
- ./nginx.conf:/usr/local/nginx/conf/sites/default.conf:ro
|
||||
- ./dist:/srv:ro
|
||||
- ./.next:/app/.next:ro
|
||||
- ./public:/app/public:ro
|
||||
- ./next.config.js:/app/next.config.js:ro
|
||||
networks:
|
||||
- traefik
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.port=80
|
||||
- traefik.port=3000
|
||||
- traefik.docker.network=traefik
|
||||
- traefik.backend=home
|
||||
- traefik.frontend.rule=Host:nicco.io
|
||||
|
@ -1,11 +1,14 @@
|
||||
version: '3.7'
|
||||
|
||||
volumes:
|
||||
data:
|
||||
|
||||
services:
|
||||
home:
|
||||
image: cupcakearmy/static
|
||||
restart: always
|
||||
front:
|
||||
build: .
|
||||
ports:
|
||||
- 3000:80
|
||||
- 80:3000
|
||||
volumes:
|
||||
- ./nginx.conf:/usr/local/nginx/conf/sites/default.conf:ro
|
||||
- ./dist:/srv:ro
|
||||
- ./.next:/app/.next:ro
|
||||
- ./public:/app/public:ro
|
||||
- ./next.config.js:/app/next.config.js:ro
|
2
next-env.d.ts
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
/// <reference types="next" />
|
||||
/// <reference types="next/types/global" />
|
6
next.config.js
Normal file
@ -0,0 +1,6 @@
|
||||
const withStylus = require('@zeit/next-stylus')
|
||||
const withCss = require('@zeit/next-css')
|
||||
|
||||
module.exports = withCss(withStylus({
|
||||
// cssModules: true,
|
||||
}))
|
18
package.json
@ -1,22 +1,24 @@
|
||||
{
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "parcel build ./src/index.html",
|
||||
"dev": "parcel ./src/index.html"
|
||||
"dev": "next",
|
||||
"build": "next build",
|
||||
"start": "next start"
|
||||
},
|
||||
"dependencies": {
|
||||
"animejs": "3.x",
|
||||
"parcel-bundler": "1.x",
|
||||
"next": "9.x",
|
||||
"react": "16.12.x",
|
||||
"react-dom": "16.12.x",
|
||||
"react-router-dom": "5.x"
|
||||
"react-dom": "16.12.x"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/animejs": "3.x",
|
||||
"@types/node": "^13.1.4",
|
||||
"@types/react": "16.9.x",
|
||||
"@types/react-dom": "16.9.x",
|
||||
"@types/react-router-dom": "5.x",
|
||||
"stylus": "0.54.x",
|
||||
"@zeit/next-css": "^1.0.1",
|
||||
"@zeit/next-stylus": "^1.0.1",
|
||||
"stylus": "^0.54.7",
|
||||
"typescript": "3.7.x"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
24
pages/_app.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
import React from 'react'
|
||||
import App from 'next/app'
|
||||
import Head from 'next/head'
|
||||
|
||||
import '../styles/fonts.css'
|
||||
import '../styles/global.styl'
|
||||
|
||||
|
||||
|
||||
export default class extends App {
|
||||
render() {
|
||||
const { Component, pageProps } = this.props
|
||||
return (
|
||||
<React.Fragment>
|
||||
<Head>
|
||||
<title>Alessandra Marten</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta charSet="utf-8" />
|
||||
</Head>
|
||||
<Component {...pageProps} />
|
||||
</React.Fragment>
|
||||
)
|
||||
}
|
||||
}
|
53
pages/index.tsx
Normal file
@ -0,0 +1,53 @@
|
||||
import React from 'react'
|
||||
import dynamic from 'next/dynamic'
|
||||
|
||||
import AnimatedBackground from '../components/AnimatedBackground'
|
||||
import Parallax from '../components/Parallax'
|
||||
import Letters from '../screens/Letters'
|
||||
import { useInnerWindowSize } from '../utils/hooks'
|
||||
|
||||
import '../styles/Home.styl'
|
||||
|
||||
|
||||
|
||||
const Cursor = dynamic(() => import('../components/Cursor'), { ssr: false })
|
||||
|
||||
const Home: React.FC = () => {
|
||||
|
||||
const size = useInnerWindowSize()
|
||||
|
||||
return <div id="home" style={size}>
|
||||
<header className={'fixed'}>
|
||||
<span><a target='_blank' href={'https://blog.nicco.io'}>blog</a></span>
|
||||
<span><a target='_blank' href={'https://github.com/cupcakearmy'}>github</a></span>
|
||||
</header>
|
||||
|
||||
<Parallax>
|
||||
<section id={'letters-container'}>
|
||||
<h1>
|
||||
<Letters />
|
||||
</h1>
|
||||
</section>
|
||||
</Parallax>
|
||||
|
||||
<div id={'bg'}>
|
||||
<AnimatedBackground />
|
||||
</div>
|
||||
|
||||
<Cursor />
|
||||
|
||||
<footer className={'fixed'}>
|
||||
<span>developer.</span>
|
||||
<br />
|
||||
<span><a href={'mailto:hi@nicco.io'}>say <b>hi@nicco.io</b></a></span>
|
||||
<br />
|
||||
<span>
|
||||
<small>
|
||||
<a href={'/privacy'}>privacy</a> - <a href={'/tos'}>terms of service</a>
|
||||
</small>
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
}
|
||||
|
||||
export default Home
|
33
pages/privacy.tsx
Normal file
@ -0,0 +1,33 @@
|
||||
import React from 'react'
|
||||
|
||||
import StaticText from '../components/staticText'
|
||||
|
||||
|
||||
|
||||
const Privacy: React.FC = () => {
|
||||
return <StaticText>
|
||||
<h2>Privacy Policy</h2>
|
||||
<p>Your privacy is important to us. It is Nicco IO's policy to respect your privacy regarding any
|
||||
information we may collect from you across our website, <a href="https://nicco.io">https://nicco.io</a>,
|
||||
and other sites we own and operate.</p>
|
||||
<p>We only ask for personal information when we truly need it to provide a service to you. We collect it by
|
||||
fair and lawful means, with your knowledge and consent. We also let you know why we’re collecting it and
|
||||
how it will be used.</p>
|
||||
<p>We only retain collected information for as long as necessary to provide you with your requested service.
|
||||
What data we store, we’ll protect within commercially acceptable means to prevent loss and theft, as
|
||||
well as unauthorised access, disclosure, copying, use or modification.</p>
|
||||
<p><b>We don’t share any personally identifying information publicly or with third-parties</b>, except when
|
||||
required to by law.</p>
|
||||
<p>Our website may link to external sites that are not operated by us. Please be aware that we have no
|
||||
control over the content and practices of these sites, and cannot accept responsibility or liability for
|
||||
their respective privacy policies.</p>
|
||||
<p>You are free to refuse our request for your personal information, with the understanding that we may be
|
||||
unable to provide you with some of your desired services.</p>
|
||||
<p>Your continued use of our website will be regarded as acceptance of our practices around privacy and
|
||||
personal information. If you have any questions about how we handle user data and personal information,
|
||||
feel free to contact us.</p>
|
||||
<p>This policy is effective as of 1 January 2019.</p>
|
||||
</StaticText>
|
||||
}
|
||||
|
||||
export default Privacy
|
74
pages/tos.tsx
Normal file
@ -0,0 +1,74 @@
|
||||
import React from 'react'
|
||||
|
||||
import StaticText from '../components/staticText'
|
||||
|
||||
|
||||
|
||||
const TOS: React.FC = () => {
|
||||
return <StaticText>
|
||||
<h2>Nicco IO Terms of Service</h2>
|
||||
<h3>1. Terms</h3>
|
||||
<p>By accessing the website at <a href="http://nicco.io">http://nicco.io</a>, you are agreeing to be bound
|
||||
by these terms of service, all applicable laws and regulations, and agree that you are responsible for
|
||||
compliance with any applicable local laws. If you do not agree with any of these terms, you are
|
||||
prohibited from using or accessing this site. The materials contained in this website are protected by
|
||||
applicable copyright and trademark law.</p>
|
||||
<h3>2. Use License</h3>
|
||||
<ol type="a">
|
||||
<li>Permission is granted to temporarily download one copy of the materials (information or software) on
|
||||
Nicco IO's website for personal, non-commercial transitory viewing only. This is the grant of a
|
||||
license, not a transfer of title, and under this license you may not:
|
||||
<ol type="i">
|
||||
<li>modify or copy the materials;</li>
|
||||
<li>use the materials for any commercial purpose, or for any public display (commercial or
|
||||
non-commercial);
|
||||
</li>
|
||||
<li>attempt to decompile or reverse engineer any software contained on Nicco IO's website;</li>
|
||||
<li>remove any copyright or other proprietary notations from the materials; or</li>
|
||||
<li>transfer the materials to another person or "mirror" the materials on any other server.</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>This license shall automatically terminate if you violate any of these restrictions and may be
|
||||
terminated by Nicco IO at any time. Upon terminating your viewing of these materials or upon the
|
||||
termination of this license, you must destroy any downloaded materials in your possession whether in
|
||||
electronic or printed format.
|
||||
</li>
|
||||
</ol>
|
||||
<h3>3. Disclaimer</h3>
|
||||
<ol type="a">
|
||||
<li>The materials on Nicco IO's website are provided on an 'as is' basis. Nicco IO makes no warranties,
|
||||
expressed or implied, and hereby disclaims and negates all other warranties including, without
|
||||
limitation, implied warranties or conditions of merchantability, fitness for a particular purpose,
|
||||
or non-infringement of intellectual property or other violation of rights.
|
||||
</li>
|
||||
<li>Further, Nicco IO does not warrant or make any representations concerning the accuracy, likely
|
||||
results, or reliability of the use of the materials on its website or otherwise relating to such
|
||||
materials or on any sites linked to this site.
|
||||
</li>
|
||||
</ol>
|
||||
<h3>4. Limitations</h3>
|
||||
<p>In no event shall Nicco IO or its suppliers be liable for any damages (including, without limitation,
|
||||
damages for loss of data or profit, or due to business interruption) arising out of the use or inability
|
||||
to use the materials on Nicco IO's website, even if Nicco IO or a Nicco IO authorized representative has
|
||||
been notified orally or in writing of the possibility of such damage. Because some jurisdictions do not
|
||||
allow limitations on implied warranties, or limitations of liability for consequential or incidental
|
||||
damages, these limitations may not apply to you.</p>
|
||||
<h3>5. Accuracy of materials</h3>
|
||||
<p>The materials appearing on Nicco IO's website could include technical, typographical, or photographic
|
||||
errors. Nicco IO does not warrant that any of the materials on its website are accurate, complete or
|
||||
current. Nicco IO may make changes to the materials contained on its website at any time without notice.
|
||||
However Nicco IO does not make any commitment to update the materials.</p>
|
||||
<h3>6. Links</h3>
|
||||
<p>Nicco IO has not reviewed all of the sites linked to its website and is not responsible for the contents
|
||||
of any such linked site. The inclusion of any link does not imply endorsement by Nicco IO of the site.
|
||||
Use of any such linked website is at the user's own risk.</p>
|
||||
<h3>7. Modifications</h3>
|
||||
<p>Nicco IO may revise these terms of service for its website at any time without notice. By using this
|
||||
website you are agreeing to be bound by the then current version of these terms of service.</p>
|
||||
<h3>8. Governing Law</h3>
|
||||
<p>These terms and conditions are governed by and construed in accordance with the laws of Germany and you
|
||||
irrevocably submit to the exclusive jurisdiction of the courts in that State or location.</p>
|
||||
</StaticText>
|
||||
}
|
||||
|
||||
export default TOS
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
Before Width: | Height: | Size: 7.9 KiB After Width: | Height: | Size: 7.9 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1001 B After Width: | Height: | Size: 1001 B |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.3 KiB |
@ -1,5 +1,10 @@
|
||||
import React, { useEffect, useRef, useState } from 'react'
|
||||
import LetterAnimation from '../Components/LetterAnimation'
|
||||
|
||||
import LetterAnimation from '../components/LetterAnimation'
|
||||
|
||||
import '../styles/Letters.styl'
|
||||
|
||||
|
||||
|
||||
type Pair = [string, string]
|
||||
|
||||
@ -16,7 +21,6 @@ const Letters: React.FC = React.memo(() => {
|
||||
const [index, setIndex] = useState<number>(0)
|
||||
const wrapper = useRef<HTMLElement>(null)
|
||||
|
||||
|
||||
useEffect(() => {
|
||||
setTimeout(
|
||||
() => setIndex((index < pairs.length - 1) ? index + 1 : 0),
|
||||
@ -25,8 +29,9 @@ const Letters: React.FC = React.memo(() => {
|
||||
}, [index])
|
||||
|
||||
return <span id={'letters-wrapper'} ref={wrapper}>
|
||||
<LetterAnimation text={pairs[index][0] + '.'}/>
|
||||
<LetterAnimation text={pairs[index][1] + '.'} delay={500}/>
|
||||
<LetterAnimation text={pairs[index][0] + '.'} />
|
||||
<br />
|
||||
<LetterAnimation text={pairs[index][1] + '.'} delay={500} />
|
||||
</span>
|
||||
})
|
||||
|
23
src/App.tsx
@ -1,23 +0,0 @@
|
||||
import React from 'react'
|
||||
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom'
|
||||
|
||||
import Suspend from './Components/Suspend'
|
||||
|
||||
const Home = React.lazy(() => import('./Screens/Home'))
|
||||
const Privacy = React.lazy(() => import('./Screens/Privacy'))
|
||||
const TOS = React.lazy(() => import('./Screens/TermsOfService'))
|
||||
|
||||
export const Duration = 4000
|
||||
|
||||
const App: React.FC = () => {
|
||||
|
||||
return <Router>
|
||||
<Switch>
|
||||
<Route exact path={'/privacy'} component={Suspend(Privacy)}/>
|
||||
<Route exact path={'/terms-of-service'} component={Suspend(TOS)}/>
|
||||
<Route component={Suspend(Home)}/>
|
||||
</Switch>
|
||||
</Router>
|
||||
}
|
||||
|
||||
export default App
|
@ -1,8 +0,0 @@
|
||||
import React, { Suspense } from 'react'
|
||||
|
||||
|
||||
const Suspend: (C: React.ComponentType) => React.ComponentType = (C) => () => {
|
||||
return <Suspense fallback={<span>...</span>} children={<C/>}/>
|
||||
}
|
||||
|
||||
export default Suspend
|
@ -1,47 +0,0 @@
|
||||
import React from 'react'
|
||||
|
||||
import AnimatedBackground from '../Components/AnimatedBackground'
|
||||
import Cursor from '../Components/Cursor'
|
||||
import Parallax from '../Components/Parallax'
|
||||
import Letters from '../Screens/Letters'
|
||||
import { useInnerWindowSize } from '../util'
|
||||
|
||||
const Home: React.FC = () => {
|
||||
|
||||
const { height, width } = useInnerWindowSize()
|
||||
|
||||
return <div id="home" style={{ width: width + 'px', height: height + 'px' }}>
|
||||
<header className={'fixed'}>
|
||||
<span><a href={'https://blog.nicco.io'}>blog</a></span>
|
||||
<span><a href={'https://github.com/cupcakearmy'}>github</a></span>
|
||||
</header>
|
||||
|
||||
<Parallax>
|
||||
<section id={'letters-container'}>
|
||||
<h1>
|
||||
<Letters/>
|
||||
</h1>
|
||||
</section>
|
||||
</Parallax>
|
||||
|
||||
<div id={'bg'}>
|
||||
<AnimatedBackground/>
|
||||
</div>
|
||||
|
||||
<Cursor/>
|
||||
|
||||
<footer className={'fixed'}>
|
||||
<span>developer.</span>
|
||||
<br/>
|
||||
<span><a href={'mailto:hi@nicco.io'}>say <b>hi@nicco.io</b></a></span>
|
||||
<br/>
|
||||
<span>
|
||||
<small>
|
||||
<a href={'/privacy'}>privacy</a> - <a href={'/terms-of-service'}>terms of service</a>
|
||||
</small>
|
||||
</span>
|
||||
</footer>
|
||||
</div>
|
||||
}
|
||||
|
||||
export default Home
|
@ -1,31 +0,0 @@
|
||||
import React from 'react'
|
||||
|
||||
const Privacy: React.FC = () => {
|
||||
return <div className={'static'}>
|
||||
<div className={'content'}>
|
||||
<h2>Privacy Policy</h2>
|
||||
<p>Your privacy is important to us. It is Nicco IO's policy to respect your privacy regarding any
|
||||
information we may collect from you across our website, <a href="https://nicco.io">https://nicco.io</a>,
|
||||
and other sites we own and operate.</p>
|
||||
<p>We only ask for personal information when we truly need it to provide a service to you. We collect it by
|
||||
fair and lawful means, with your knowledge and consent. We also let you know why we’re collecting it and
|
||||
how it will be used.</p>
|
||||
<p>We only retain collected information for as long as necessary to provide you with your requested service.
|
||||
What data we store, we’ll protect within commercially acceptable means to prevent loss and theft, as
|
||||
well as unauthorised access, disclosure, copying, use or modification.</p>
|
||||
<p><b>We don’t share any personally identifying information publicly or with third-parties</b>, except when
|
||||
required to by law.</p>
|
||||
<p>Our website may link to external sites that are not operated by us. Please be aware that we have no
|
||||
control over the content and practices of these sites, and cannot accept responsibility or liability for
|
||||
their respective privacy policies.</p>
|
||||
<p>You are free to refuse our request for your personal information, with the understanding that we may be
|
||||
unable to provide you with some of your desired services.</p>
|
||||
<p>Your continued use of our website will be regarded as acceptance of our practices around privacy and
|
||||
personal information. If you have any questions about how we handle user data and personal information,
|
||||
feel free to contact us.</p>
|
||||
<p>This policy is effective as of 1 January 2019.</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
export default Privacy
|
@ -1,72 +0,0 @@
|
||||
import React from 'react'
|
||||
|
||||
const TOS: React.FC = () => {
|
||||
return <div className={'static'}>
|
||||
<div className={'content'}>
|
||||
<h2>Nicco IO Terms of Service</h2>
|
||||
<h3>1. Terms</h3>
|
||||
<p>By accessing the website at <a href="http://nicco.io">http://nicco.io</a>, you are agreeing to be bound
|
||||
by these terms of service, all applicable laws and regulations, and agree that you are responsible for
|
||||
compliance with any applicable local laws. If you do not agree with any of these terms, you are
|
||||
prohibited from using or accessing this site. The materials contained in this website are protected by
|
||||
applicable copyright and trademark law.</p>
|
||||
<h3>2. Use License</h3>
|
||||
<ol type="a">
|
||||
<li>Permission is granted to temporarily download one copy of the materials (information or software) on
|
||||
Nicco IO's website for personal, non-commercial transitory viewing only. This is the grant of a
|
||||
license, not a transfer of title, and under this license you may not:
|
||||
<ol type="i">
|
||||
<li>modify or copy the materials;</li>
|
||||
<li>use the materials for any commercial purpose, or for any public display (commercial or
|
||||
non-commercial);
|
||||
</li>
|
||||
<li>attempt to decompile or reverse engineer any software contained on Nicco IO's website;</li>
|
||||
<li>remove any copyright or other proprietary notations from the materials; or</li>
|
||||
<li>transfer the materials to another person or "mirror" the materials on any other server.</li>
|
||||
</ol>
|
||||
</li>
|
||||
<li>This license shall automatically terminate if you violate any of these restrictions and may be
|
||||
terminated by Nicco IO at any time. Upon terminating your viewing of these materials or upon the
|
||||
termination of this license, you must destroy any downloaded materials in your possession whether in
|
||||
electronic or printed format.
|
||||
</li>
|
||||
</ol>
|
||||
<h3>3. Disclaimer</h3>
|
||||
<ol type="a">
|
||||
<li>The materials on Nicco IO's website are provided on an 'as is' basis. Nicco IO makes no warranties,
|
||||
expressed or implied, and hereby disclaims and negates all other warranties including, without
|
||||
limitation, implied warranties or conditions of merchantability, fitness for a particular purpose,
|
||||
or non-infringement of intellectual property or other violation of rights.
|
||||
</li>
|
||||
<li>Further, Nicco IO does not warrant or make any representations concerning the accuracy, likely
|
||||
results, or reliability of the use of the materials on its website or otherwise relating to such
|
||||
materials or on any sites linked to this site.
|
||||
</li>
|
||||
</ol>
|
||||
<h3>4. Limitations</h3>
|
||||
<p>In no event shall Nicco IO or its suppliers be liable for any damages (including, without limitation,
|
||||
damages for loss of data or profit, or due to business interruption) arising out of the use or inability
|
||||
to use the materials on Nicco IO's website, even if Nicco IO or a Nicco IO authorized representative has
|
||||
been notified orally or in writing of the possibility of such damage. Because some jurisdictions do not
|
||||
allow limitations on implied warranties, or limitations of liability for consequential or incidental
|
||||
damages, these limitations may not apply to you.</p>
|
||||
<h3>5. Accuracy of materials</h3>
|
||||
<p>The materials appearing on Nicco IO's website could include technical, typographical, or photographic
|
||||
errors. Nicco IO does not warrant that any of the materials on its website are accurate, complete or
|
||||
current. Nicco IO may make changes to the materials contained on its website at any time without notice.
|
||||
However Nicco IO does not make any commitment to update the materials.</p>
|
||||
<h3>6. Links</h3>
|
||||
<p>Nicco IO has not reviewed all of the sites linked to its website and is not responsible for the contents
|
||||
of any such linked site. The inclusion of any link does not imply endorsement by Nicco IO of the site.
|
||||
Use of any such linked website is at the user's own risk.</p>
|
||||
<h3>7. Modifications</h3>
|
||||
<p>Nicco IO may revise these terms of service for its website at any time without notice. By using this
|
||||
website you are agreeing to be bound by the then current version of these terms of service.</p>
|
||||
<h3>8. Governing Law</h3>
|
||||
<p>These terms and conditions are governed by and construed in accordance with the laws of Germany and you
|
||||
irrevocably submit to the exclusive jurisdiction of the courts in that State or location.</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
export default TOS
|
@ -1,37 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<title>cupcakearmy 👋</title>
|
||||
<meta charset="utf-8">
|
||||
<meta content="width=device-width, initial-scale=1" name="viewport">
|
||||
<meta name="Description" content="Author: cupcakearmy, Design: cupcakearmy">
|
||||
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="./Assets/apple-touch-icon.png">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="./Assets/favicon-32x32.png">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="./Assets/favicon-16x16.png">
|
||||
<link rel="manifest" href="./Assets/site.webmanifest">
|
||||
<link rel="mask-icon" href="./Assets/safari-pinned-tab.svg" color="#16b4e9">
|
||||
<meta name="apple-mobile-web-app-title" content="nicco.io">
|
||||
<meta name="application-name" content="nicco.io">
|
||||
<meta name="theme-color" content="#16b4e9">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script src="./index.tsx"></script>
|
||||
<script type="text/javascript">
|
||||
var _paq = window._paq || [];
|
||||
_paq.push(['trackPageView']);
|
||||
_paq.push(['enableLinkTracking']);
|
||||
(function () {
|
||||
var u = "//stats.nicco.io/";
|
||||
_paq.push(['setTrackerUrl', u + 'p_unicorns']);
|
||||
_paq.push(['setSiteId', '1']);
|
||||
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
|
||||
g.type = 'text/javascript'; g.async = true; g.defer = true; g.src = u + 'j_unicorns'; s.parentNode.insertBefore(g, s);
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -1,2 +0,0 @@
|
||||
@require './vendor/fonts/import'
|
||||
@require './styles/*'
|
@ -1,8 +0,0 @@
|
||||
import React from 'react'
|
||||
import ReactDOM from 'react-dom'
|
||||
|
||||
import App from './App'
|
||||
import './index.styl'
|
||||
|
||||
|
||||
ReactDOM.render(<App />, document.getElementById('root'))
|
@ -1,4 +1,4 @@
|
||||
@require './Breakpoints.styl'
|
||||
@require 'Breakpoints.styl'
|
||||
|
||||
#home
|
||||
height 100vh
|
||||
@ -20,19 +20,11 @@
|
||||
#letters-wrapper
|
||||
display inline-block
|
||||
text-align center
|
||||
font-size 1em
|
||||
font-size 16vw
|
||||
font-weight bold
|
||||
+is-phone()
|
||||
font-size 2.5em
|
||||
+is-tablet()
|
||||
font-size 3em
|
||||
+is-netbook()
|
||||
font-size 3.5em
|
||||
+is-laptop()
|
||||
font-size 4em
|
||||
+is-desktop()
|
||||
font-size 4.5em
|
||||
|
||||
font-size 16vmin
|
||||
|
||||
footer
|
||||
bottom 0
|
||||
flex-direction column
|
@ -1,6 +1,6 @@
|
||||
@font-face {
|
||||
font-family: 'Inconsolata';
|
||||
src: url('vendor/fonts/Inconsolata-Regular.woff2') format('woff2');
|
||||
src: url('/static/Inconsolata-Regular.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
@ -8,7 +8,7 @@
|
||||
|
||||
@font-face {
|
||||
font-family: 'Merriweather';
|
||||
src: url('vendor/fonts/Merriweather-Regular.woff2') format('woff2');
|
||||
src: url('/static/Merriweather-Regular.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
||||
@ -16,7 +16,7 @@
|
||||
|
||||
@font-face {
|
||||
font-family: 'Inconsolata';
|
||||
src: url('vendor/fonts/Inconsolata-Bold.woff2') format('woff2');
|
||||
src: url('/static/Inconsolata-Bold.woff2') format('woff2');
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
font-display: swap;
|
@ -2,7 +2,7 @@
|
||||
"compilerOptions": {
|
||||
"target": "esnext",
|
||||
"module": "esnext",
|
||||
"jsx": "react",
|
||||
"jsx": "preserve",
|
||||
"rootDir": "./src",
|
||||
"removeComments": true,
|
||||
"strict": true,
|
||||
@ -14,6 +14,25 @@
|
||||
"noImplicitThis": true,
|
||||
"alwaysStrict": true,
|
||||
"moduleResolution": "node",
|
||||
"esModuleInterop": true
|
||||
}
|
||||
}
|
||||
"esModuleInterop": true,
|
||||
"lib": [
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"esnext"
|
||||
],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"noEmit": true,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true
|
||||
},
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
],
|
||||
"include": [
|
||||
"next-env.d.ts",
|
||||
"**/*.ts",
|
||||
"**/*.tsx"
|
||||
]
|
||||
}
|
||||
|
1
utils/config.ts
Normal file
@ -0,0 +1 @@
|
||||
export const Duration = 4000
|
@ -2,11 +2,17 @@ import { useEffect, useState } from 'react'
|
||||
|
||||
|
||||
|
||||
type Size = { width: number, height: number }
|
||||
type Size = { width: string, height: string }
|
||||
export const useInnerWindowSize = (): Size => {
|
||||
|
||||
if (typeof window === 'undefined') return {
|
||||
width: '100vw',
|
||||
height: '100vh',
|
||||
}
|
||||
|
||||
const getCurrentSize = (): Size => ({
|
||||
height: window.innerHeight,
|
||||
width: window.innerWidth,
|
||||
height: window.innerHeight + 'px',
|
||||
width: window.innerWidth + 'px',
|
||||
})
|
||||
|
||||
let [size, setSize] = useState<Size>(getCurrentSize)
|
||||
@ -104,9 +110,4 @@ export const useMousePosition = () => {
|
||||
return position
|
||||
}
|
||||
|
||||
export const Rand = (from: number = 0, to: number = 1, float: boolean = false) => {
|
||||
const rand = (Math.random() * (to - from)) + from
|
||||
return float ? rand : rand | 0
|
||||
}
|
||||
|
||||
export const GoldenRatio: number = (1 + Math.sqrt(5)) / 2
|
6
utils/utils.ts
Normal file
@ -0,0 +1,6 @@
|
||||
export const Rand = (from: number = 0, to: number = 1, float: boolean = false) => {
|
||||
const rand = (Math.random() * (to - from)) + from
|
||||
return float ? rand : rand | 0
|
||||
}
|
||||
|
||||
export const GoldenRatio: number = (1 + Math.sqrt(5)) / 2
|