feat(): add files
This commit is contained in:
parent
387d5d4129
commit
6498c3a9ac
24
.gitignore
vendored
Normal file
24
.gitignore
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
28
eslint.config.js
Normal file
28
eslint.config.js
Normal file
@ -0,0 +1,28 @@
|
||||
import js from '@eslint/js'
|
||||
import globals from 'globals'
|
||||
import reactHooks from 'eslint-plugin-react-hooks'
|
||||
import reactRefresh from 'eslint-plugin-react-refresh'
|
||||
import tseslint from 'typescript-eslint'
|
||||
|
||||
export default tseslint.config(
|
||||
{ ignores: ['dist'] },
|
||||
{
|
||||
extends: [js.configs.recommended, ...tseslint.configs.recommended],
|
||||
files: ['**/*.{ts,tsx}'],
|
||||
languageOptions: {
|
||||
ecmaVersion: 2020,
|
||||
globals: globals.browser,
|
||||
},
|
||||
plugins: {
|
||||
'react-hooks': reactHooks,
|
||||
'react-refresh': reactRefresh,
|
||||
},
|
||||
rules: {
|
||||
...reactHooks.configs.recommended.rules,
|
||||
'react-refresh/only-export-components': [
|
||||
'warn',
|
||||
{ allowConstantExport: true },
|
||||
],
|
||||
},
|
||||
},
|
||||
)
|
37
index.html
Normal file
37
index.html
Normal file
@ -0,0 +1,37 @@
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/jpg" href="./avatar.jpg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Aleksander Wilczyński | wilczyński.me</title>
|
||||
|
||||
<meta name="title" content="Aleksander Wilczyński" />
|
||||
<meta name="description" content="IT Administrator, Fullstack Developer" />
|
||||
|
||||
<meta name="theme-color" content="#b942f5">
|
||||
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:url" content="https://wilczyński.me/" />
|
||||
<meta property="og:title" content="Aleksander Wilczyński" />
|
||||
<meta property="og:description" content="IT Administrator, Fullstack Developer" />
|
||||
<meta property="og:image" content="https://wilczynski.me/avatar.jpg" />
|
||||
|
||||
<meta property="twitter:card" content="summary" />
|
||||
<meta property="twitter:url" content="https://wilczyński.me/" />
|
||||
<meta property="twitter:title" content="Aleksander Wilczyński" />
|
||||
<meta property="twitter:description" content="IT Administrator, Fullstack Developer" />
|
||||
<meta property="twitter:image" content="https://wilczynski.me/avatar.jpg" />
|
||||
|
||||
<meta property="discord:app:name" content="Aleksander Wilczyński">
|
||||
<meta property="discord:app:description" content="IT Administrator, Fullstack Developer">
|
||||
<meta property="discord:app:image" content="https://wilczynski.me/avatar.jpg">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
3857
package-lock.json
generated
Normal file
3857
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
37
package.json
Normal file
37
package.json
Normal file
@ -0,0 +1,37 @@
|
||||
{
|
||||
"name": "wilczynski.me",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "tsc -b && vite build",
|
||||
"lint": "eslint .",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"@tailwindcss/cli": "^4.0.12",
|
||||
"@tailwindcss/postcss": "^4.0.12",
|
||||
"i18next": "^24.2.3",
|
||||
"i18next-browser-languagedetector": "^8.0.4",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"react-i18next": "^15.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.21.0",
|
||||
"@types/react": "^19.0.10",
|
||||
"@types/react-dom": "^19.0.4",
|
||||
"@vitejs/plugin-react": "^4.3.4",
|
||||
"autoprefixer": "^10.4.21",
|
||||
"eslint": "^9.21.0",
|
||||
"eslint-plugin-react-hooks": "^5.1.0",
|
||||
"eslint-plugin-react-refresh": "^0.4.19",
|
||||
"globals": "^15.15.0",
|
||||
"postcss": "^8.5.3",
|
||||
"tailwindcss": "^4.0.12",
|
||||
"typescript": "~5.7.2",
|
||||
"typescript-eslint": "^8.24.1",
|
||||
"vite": "^6.2.0"
|
||||
}
|
||||
}
|
5
postcss.config.mjs
Normal file
5
postcss.config.mjs
Normal file
@ -0,0 +1,5 @@
|
||||
export default {
|
||||
plugins: {
|
||||
"@tailwindcss/postcss": {},
|
||||
}
|
||||
}
|
BIN
public/avatar.jpg
Normal file
BIN
public/avatar.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
4
public/robots.txt
Normal file
4
public/robots.txt
Normal file
@ -0,0 +1,4 @@
|
||||
User-agent: *
|
||||
Allow: /
|
||||
|
||||
Sitemap: https://wilczynski.me/sitemap.xml
|
4
public/security.txt
Normal file
4
public/security.txt
Normal file
@ -0,0 +1,4 @@
|
||||
Contact: mailto:security@wilczynski.me
|
||||
Expires: 2027-12-02T23:00:00.000Z
|
||||
Preferred-Languages: en, pl
|
||||
Canonical: https://wilczynski.me/security.txt
|
7
public/sitemap.xml
Normal file
7
public/sitemap.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://www.wilczynski.me/</loc>
|
||||
<lastmod>2025-03-19</lastmod>
|
||||
</url>
|
||||
</urlset>
|
22
src/App.tsx
Normal file
22
src/App.tsx
Normal file
@ -0,0 +1,22 @@
|
||||
import { Header } from './components/Header.tsx';
|
||||
import { Whoami } from './components/Whoami.tsx';
|
||||
import { Skills } from './components/Skills.tsx';
|
||||
import { Projects } from './components/Projects.tsx';
|
||||
import { Contact } from './components/Contact.tsx';
|
||||
import { Accounts } from './components/Accounts.tsx';
|
||||
|
||||
export const App = () => {
|
||||
return (
|
||||
<>
|
||||
<Header />
|
||||
|
||||
<div className="flex flex-col mt-25 gap-8 font-sans grow">
|
||||
<Whoami />
|
||||
<Skills />
|
||||
<Projects />
|
||||
<Contact />
|
||||
<Accounts />
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
}
|
47
src/components/Accounts.tsx
Normal file
47
src/components/Accounts.tsx
Normal file
@ -0,0 +1,47 @@
|
||||
import { DiscordIcon, GiteaIcon, GithubIcon, LinkedInIcon } from './Icons.tsx';
|
||||
|
||||
export const Accounts = () => {
|
||||
return <div className="flex flex-col gap-4 md:flex-row">
|
||||
<a href='https://discord.com/users/821421438719492136' className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 grow basis-1 '>
|
||||
<div className="flex flex-row gap-4 h-full">
|
||||
<div className="flex flex-col justify-center">
|
||||
<DiscordIcon />
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col justify-center">
|
||||
<p className='font-bold'>Discord</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<a href='https://github.com/alekswilc' className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 grow basis-1'>
|
||||
<div className="flex flex-row gap-4 h-full">
|
||||
<div className="flex flex-col justify-center">
|
||||
<GithubIcon />
|
||||
</div>
|
||||
<div className="flex flex-col justify-center">
|
||||
<p className='font-bold'>Github</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<a href='https://git.alekswilc.dev/alekswilc/' className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 grow basis-1'>
|
||||
<div className="flex flex-row gap-4 h-full">
|
||||
<div className="flex flex-col justify-center">
|
||||
<GiteaIcon />
|
||||
</div>
|
||||
<div className="flex flex-col justify-center">
|
||||
<p className='font-bold'>Gitea</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
<a href='https://linkedin.com/in/alekswilc/' className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 grow basis-1'>
|
||||
<div className="flex flex-row gap-4">
|
||||
<div className="flex flex-col justify-center">
|
||||
<LinkedInIcon />
|
||||
</div>
|
||||
<div className="flex flex-col justify-center">
|
||||
<p className='font-bold'>LinkedIn</p>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
</div>;
|
||||
}
|
24
src/components/Contact.tsx
Normal file
24
src/components/Contact.tsx
Normal file
@ -0,0 +1,24 @@
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
export const Contact = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return <div className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 justify-center font-light'>
|
||||
<h1 className='text-xl font-bold'>{t("landing.contact.title")}</h1>
|
||||
|
||||
<div className='flex flex-row gap-2'>
|
||||
<svg width="25" height="25" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M29.3333 17.3334V8.00004C29.3333 7.2928 29.0524 6.61452 28.5523 6.11442C28.0522 5.61433 27.3739 5.33337 26.6667 5.33337H5.33332C4.62608 5.33337 3.9478 5.61433 3.4477 6.11442C2.94761 6.61452 2.66666 7.2928 2.66666 8.00004V24C2.66666 25.4667 3.86666 26.6667 5.33332 26.6667H16M29.3333 9.33337L17.3733 16.9334C16.9617 17.1913 16.4857 17.3281 16 17.3281C15.5142 17.3281 15.0383 17.1913 14.6267 16.9334L2.66666 9.33337M25.3333 21.3334V29.3334M21.3333 25.3334H29.3333" stroke="#FABE5E" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
||||
</svg>
|
||||
<a href='mailto:aleks@wilczynski.me'>{t("landing.contact.email")}</a>
|
||||
</div>
|
||||
|
||||
|
||||
<div className="flex flex-row gap-2">
|
||||
<svg width="25" height="25" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M29.3333 14V8.00004C29.3333 7.2928 29.0524 6.61452 28.5523 6.11442C28.0522 5.61433 27.3739 5.33337 26.6667 5.33337H5.33332C4.62608 5.33337 3.9478 5.61433 3.4477 6.11442C2.94761 6.61452 2.66666 7.2928 2.66666 8.00004V24C2.66666 25.4667 3.86666 26.6667 5.33332 26.6667H22M29.3333 9.33337L17.3733 16.9334C16.9617 17.1913 16.4857 17.3281 16 17.3281C15.5142 17.3281 15.0383 17.1913 14.6267 16.9334L2.66666 9.33337M26.6667 18.6667V24M26.6667 29.3334V29.3467" stroke="#FE7979" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
|
||||
</svg>
|
||||
<a href='mailto:security@wilczynski.me'>{t("landing.contact.vulb")}</a>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
38
src/components/Header.tsx
Normal file
38
src/components/Header.tsx
Normal file
@ -0,0 +1,38 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
const getTimeFormat = (currentLanguage: string) => new Intl.DateTimeFormat(currentLanguage, {
|
||||
dateStyle: "full",
|
||||
timeStyle: "long",
|
||||
timeZone: "Europe/Warsaw",
|
||||
}).format(new Date());
|
||||
|
||||
export const Header = () => {
|
||||
const { t, i18n: { changeLanguage, language } } = useTranslation();
|
||||
const [currentLanguage, setCurrentLanguage] = useState(language);
|
||||
const [clock, setClock] = useState(getTimeFormat(currentLanguage));
|
||||
|
||||
useEffect(() => {
|
||||
setClock(getTimeFormat(currentLanguage));
|
||||
const _ = setInterval(() => setClock(getTimeFormat(currentLanguage)), 1000);
|
||||
return () => clearInterval(_);
|
||||
}, [currentLanguage]);
|
||||
|
||||
|
||||
const handleChangeLanguage = () => {
|
||||
const newLanguage = currentLanguage === "en" ? "pl" : "en";
|
||||
setCurrentLanguage(newLanguage);
|
||||
changeLanguage(newLanguage);
|
||||
}
|
||||
|
||||
return <div className='sticky flex flex-col gap-24 top-4 select-none'>
|
||||
<div className='p-4 border-1 border-[#757575] rounded-xl flex flex-col md:flex-row grow justify-around bg-[#1C1C1C]'>
|
||||
<h1 className='text-white'>{t('header.home')}</h1>
|
||||
|
||||
<h1 className='text-white'>{clock}</h1>
|
||||
<h1 className='text-white'>
|
||||
<button className='cursor-pointer' onClick={handleChangeLanguage}>{['PL', 'EN'].map<React.ReactNode>(x => currentLanguage.includes(x.toLocaleLowerCase()) ? (<b>{x}</b>) : x).reduce((prev, curr) => [prev, '/', curr])}</button>
|
||||
</h1>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
29
src/components/Icons.tsx
Normal file
29
src/components/Icons.tsx
Normal file
File diff suppressed because one or more lines are too long
35
src/components/Projects.tsx
Normal file
35
src/components/Projects.tsx
Normal file
@ -0,0 +1,35 @@
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
export const Projects = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return <div className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 justify-center font-light'>
|
||||
<h1 className='text-xl font-bold'>{t("landing.projects.title")}</h1>
|
||||
|
||||
<div className="flex flex-col gap-4 pt-4">
|
||||
<div className="flex flex-row gap-4 basis-1">
|
||||
<div className='bg-[#1C1C1C] text-white flex border-1 border-[#757575] rounded-xl text-left p-4 flex-col md:flex-row basis-1 grow'>
|
||||
<div className='flex flex-col justify-center text-center items-center'>
|
||||
<img alt='image' className='w-20 rounded md:pr-4' src='https://cdn.alekswilc.dev/0dab8e0d-fcc9-481a-9a58-5ebb5a9dda39.png' />
|
||||
</div>
|
||||
|
||||
<div className='flex flex-col justify-center'>
|
||||
<h1 className='text-xl font-bold'>{t("landing.projects.projects.simrailpro.title")}</h1>
|
||||
<p className='font-light'>{t("landing.projects.projects.simrailpro.descripton")}</p>
|
||||
</div>
|
||||
</div>
|
||||
<div className='bg-[#1C1C1C] text-white flex border-1 border-[#757575] rounded-xl text-left p-4 flex-col md:flex-row basis-1 grow align-center'>
|
||||
<div className='flex flex-col justify-center text-center items-center'>
|
||||
<img alt='image' className='w-20 rounded md:pr-4' src='https://cdn.alekswilc.dev/431d2c3e-746b-41f5-9899-d4e1ee81c0cf.png' />
|
||||
</div>
|
||||
|
||||
<div className='flex flex-col justify-center'>
|
||||
<h1 className='text-xl font-bold'>{t("landing.projects.projects.cocorp.title")}</h1>
|
||||
<p className='font-light'>{t("landing.projects.projects.cocorp.descripton")}</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
42
src/components/Skills.tsx
Normal file
42
src/components/Skills.tsx
Normal file
@ -0,0 +1,42 @@
|
||||
import { useTranslation } from 'react-i18next';
|
||||
|
||||
export const Skills = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return <div className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 justify-center font-light'>
|
||||
<h1 className='text-xl font-bold'>{t("landing.skills.title")}</h1>
|
||||
|
||||
<div className="flex flex-col md:flex-row gap-4 md:gap-0 justify-between">
|
||||
<div className="flex flex-col">
|
||||
<p className='text-xl md:text-base'>{t("landing.skills.languages")}</p>
|
||||
<p className='text-blue-400'>HTML</p>
|
||||
<p className='text-red-400'>React</p>
|
||||
<p className='text-orange-300'>TypeScript</p>
|
||||
<p className='text-blue-500'>C</p>
|
||||
<p className='text-purple-500'>GO</p>
|
||||
<p>{t('landing.skills.more')}</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col">
|
||||
<p className='text-xl md:text-base'>{t("landing.skills.tools")}</p>
|
||||
<p className='text-blue-400'>JetBrains</p>
|
||||
<p className='text-red-400'>Visual Studio Code</p>
|
||||
<p className='text-orange-300'>Termius</p>
|
||||
<p className='text-blue-500'>AutoCAD</p>
|
||||
<p className='text-violet-500'>Proxmox</p>
|
||||
<p className='text-cyan-500'>Cloudflare</p>
|
||||
|
||||
<p>{t('landing.skills.more')}</p>
|
||||
</div>
|
||||
|
||||
<div className="flex flex-col">
|
||||
<p className='text-xl md:text-base'>{t("landing.skills.softskills.title")}</p>
|
||||
<p className='text-red-400'>{t("landing.skills.softskills.adaptability")}</p>
|
||||
<p className='text-emerald-500'>{t("landing.skills.softskills.problem_solving")}</p>
|
||||
<p className='text-cyan-300'>{t("landing.skills.softskills.creativity")}</p>
|
||||
<p className='text-purple-500'>{t("landing.skills.softskills.time_managment")}</p>
|
||||
<p className='text-purple'>{t("landing.skills.softskills.hard_work")}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
13
src/components/Whoami.tsx
Normal file
13
src/components/Whoami.tsx
Normal file
@ -0,0 +1,13 @@
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
export const Whoami = () => {
|
||||
const { t } = useTranslation();
|
||||
|
||||
return <div className="flex flex-row gap-4">
|
||||
<div className='bg-[#1C1C1C] text-white flex flex-col border-1 border-[#757575] rounded-xl text-left p-4 grow basis-1'>
|
||||
<h1 className='text-xl font-bold'>{t('landing.title')}</h1>
|
||||
|
||||
<p className='font-light'>{t('landing.whoami')}</p>
|
||||
</div>
|
||||
</div>;
|
||||
}
|
41
src/i18n/en.json
Normal file
41
src/i18n/en.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"header": {
|
||||
"home": "Home"
|
||||
},
|
||||
"landing": {
|
||||
"title": "Hi 👋 I’m Aleksander Wilczyński",
|
||||
"whoami": "I am an IT administrator with experience in network infrastructure management and full-stack web application development. I create tools for Windows and Linux systems, as well as scripts for games. My interests include military, firearms, and emergency medical rescue.",
|
||||
"skills": {
|
||||
"title": "My Skills 🎓",
|
||||
"languages": "Languages:",
|
||||
"tools": "Tools:",
|
||||
"softskills": {
|
||||
"title": "Soft skills:",
|
||||
"adaptability": "Adaptability",
|
||||
"problem_solving": "Problem solving",
|
||||
"creativity": "Creativity",
|
||||
"time_managment": "Time Managment",
|
||||
"hard_work": "Hard work"
|
||||
},
|
||||
"more": "... and more"
|
||||
},
|
||||
"projects": {
|
||||
"title": "Featured Projects",
|
||||
"projects": {
|
||||
"simrailpro": {
|
||||
"title": "Simrail.PRO",
|
||||
"descripton": "Simrail Stats - The best SimRail logs and statistics site!"
|
||||
},
|
||||
"cocorp": {
|
||||
"title": "CoCoRP",
|
||||
"descripton": "RolePlay Fivem Server!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Contact Me",
|
||||
"email": "Send me an email: aleks@wilczynski.me",
|
||||
"vulb": "Report vulnerability: security@wilczynski.me"
|
||||
}
|
||||
}
|
||||
}
|
28
src/i18n/i18n.ts
Normal file
28
src/i18n/i18n.ts
Normal file
@ -0,0 +1,28 @@
|
||||
import i18n from "i18next";
|
||||
import { initReactI18next } from "react-i18next";
|
||||
import LanguageDetector from "i18next-browser-languagedetector";
|
||||
|
||||
import en from './en.json';
|
||||
import pl from './pl.json';
|
||||
|
||||
|
||||
i18n
|
||||
.use(initReactI18next)
|
||||
.use(LanguageDetector)
|
||||
.init({
|
||||
resources: {
|
||||
pl: {
|
||||
"_": pl,
|
||||
},
|
||||
en: {
|
||||
"_": en,
|
||||
}
|
||||
},
|
||||
debug: false,
|
||||
fallbackLng: "en",
|
||||
interpolation: {
|
||||
escapeValue: false,
|
||||
},
|
||||
ns: "_",
|
||||
defaultNS: "_",
|
||||
});
|
41
src/i18n/pl.json
Normal file
41
src/i18n/pl.json
Normal file
@ -0,0 +1,41 @@
|
||||
{
|
||||
"header": {
|
||||
"home": "Strona Główna"
|
||||
},
|
||||
"landing": {
|
||||
"title": "Hej 👋 jestem Aleksander Wilczyński",
|
||||
"whoami": "Jestem administratorem IT z doświadczeniem w zarządzaniu infrastrukturą sieciową oraz programowaniu aplikacji webowych w zakresie full stack. Tworzę narzędzia dla systemów Windows i Linux, a także skrypty do gier. Moje zainteresowania obejmują tematykę militarną, broń oraz ratownictwo medyczne.",
|
||||
"skills": {
|
||||
"title": "Moje umiejętności 🎓",
|
||||
"languages": "Języki:",
|
||||
"tools": "Narzędzia:",
|
||||
"softskills": {
|
||||
"title": "Umiejętności miękkie:",
|
||||
"adaptability": "Adaptacja",
|
||||
"problem_solving": "Rozwiązywanie problemów",
|
||||
"creativity": "Kreatywność",
|
||||
"time_managment": "Zarządzanie czasem",
|
||||
"hard_work": "Ciężka praca"
|
||||
},
|
||||
"more": "... i więcej"
|
||||
},
|
||||
"projects": {
|
||||
"title": "Wybrane projekty",
|
||||
"projects": {
|
||||
"simrailpro": {
|
||||
"title": "Simrail.PRO",
|
||||
"descripton": "Najlepsza strona z logami i statystykami do gry SimRail!"
|
||||
},
|
||||
"cocorp": {
|
||||
"title": "CoCoRP",
|
||||
"descripton": "Serwer FiveM, skoncentrowany na RP!"
|
||||
}
|
||||
}
|
||||
},
|
||||
"contact": {
|
||||
"title": "Skontaktuj się ze mną",
|
||||
"email": "Wyślij mi E-Mail: aleks@wilczynski.me",
|
||||
"vulb": "Zgłoś podatność: security@wilczynski.me"
|
||||
}
|
||||
}
|
||||
}
|
11
src/main.tsx
Normal file
11
src/main.tsx
Normal file
@ -0,0 +1,11 @@
|
||||
import { StrictMode } from 'react'
|
||||
import { createRoot } from 'react-dom/client'
|
||||
import './style/index.css';
|
||||
import { App } from './App.tsx'
|
||||
import './i18n/i18n.ts';
|
||||
|
||||
createRoot(document.getElementById('root')!).render(
|
||||
<StrictMode>
|
||||
<App />
|
||||
</StrictMode>,
|
||||
);
|
19
src/style/index.css
Normal file
19
src/style/index.css
Normal file
@ -0,0 +1,19 @@
|
||||
@import "tailwindcss";
|
||||
@import url('https://fonts.googleapis.com/css2?family=Prompt:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap');
|
||||
|
||||
#root {
|
||||
max-width: 1280px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
:root {
|
||||
--default-font-family: "Prompt", sans-serif;
|
||||
--font-sans: "Prompt", sans-serif;
|
||||
--font-mono: "Prompt", sans-serif;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: #0F0F0F;
|
||||
}
|
1
src/vite-env.d.ts
vendored
Normal file
1
src/vite-env.d.ts
vendored
Normal file
@ -0,0 +1 @@
|
||||
/// <reference types="vite/client" />
|
17
tailwind.config.js
Normal file
17
tailwind.config.js
Normal file
@ -0,0 +1,17 @@
|
||||
// tailwind.config.js
|
||||
const { fontFamily } = require('tailwindcss/defaultTheme')
|
||||
|
||||
module.exports = {
|
||||
content: [
|
||||
'./src/**/*.{js,ts,jsx,tsx}',
|
||||
],
|
||||
theme: {
|
||||
fontFamily: {
|
||||
sans: [
|
||||
'"Satoshi"',
|
||||
'sans-serif',
|
||||
],
|
||||
},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
26
tsconfig.app.json
Normal file
26
tsconfig.app.json
Normal file
@ -0,0 +1,26 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
|
||||
"target": "ES2020",
|
||||
"useDefineForClassFields": true,
|
||||
"lib": ["ES2020", "DOM", "DOM.Iterable"],
|
||||
"module": "ESNext",
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"isolatedModules": true,
|
||||
"moduleDetection": "force",
|
||||
"noEmit": true,
|
||||
"jsx": "react-jsx",
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUncheckedSideEffectImports": true
|
||||
},
|
||||
"include": ["src"]
|
||||
}
|
7
tsconfig.json
Normal file
7
tsconfig.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"files": [],
|
||||
"references": [
|
||||
{ "path": "./tsconfig.app.json" },
|
||||
{ "path": "./tsconfig.node.json" }
|
||||
]
|
||||
}
|
24
tsconfig.node.json
Normal file
24
tsconfig.node.json
Normal file
@ -0,0 +1,24 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
|
||||
"target": "ES2022",
|
||||
"lib": ["ES2023"],
|
||||
"module": "ESNext",
|
||||
"skipLibCheck": true,
|
||||
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"isolatedModules": true,
|
||||
"moduleDetection": "force",
|
||||
"noEmit": true,
|
||||
|
||||
/* Linting */
|
||||
"strict": true,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noUncheckedSideEffectImports": true
|
||||
},
|
||||
"include": ["vite.config.ts"]
|
||||
}
|
14
vite.config.ts
Normal file
14
vite.config.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import { defineConfig } from 'vite'
|
||||
import react from '@vitejs/plugin-react'
|
||||
|
||||
// https://vite.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [react()],
|
||||
|
||||
server: {
|
||||
host: '0.0.0.0',
|
||||
allowedHosts: [
|
||||
'ptb.alekswilc.dev'
|
||||
]
|
||||
}
|
||||
})
|
Loading…
x
Reference in New Issue
Block a user