Removed old website
Some checks failed
Build and Deploy Zola Website / build_and_deploy (push) Failing after 17s
Some checks failed
Build and Deploy Zola Website / build_and_deploy (push) Failing after 17s
This commit is contained in:
parent
d3c49bcc78
commit
f137aceb6e
@ -1,17 +0,0 @@
|
|||||||
# Website
|
|
||||||
- My personal website written in php, html, css and js
|
|
||||||
|
|
||||||
## To run development server
|
|
||||||
- `php -S localhost:8000`
|
|
||||||
- Then it can be access at http://localhost:8000/
|
|
||||||
|
|
||||||
## To run using Docker
|
|
||||||
- ToDo
|
|
||||||
|
|
||||||
## To Do
|
|
||||||
- [ ] Docker
|
|
||||||
- [ ] kopirovani PGP na click opravit
|
|
||||||
- [ ] projekty page css
|
|
||||||
- [ ] contact page odesilani mailu
|
|
||||||
- [ ] contact page pridat odkazy na dalsi soc site (github atd)
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
<p>(c) filiprojek.cz 2023<p>
|
|
||||||
|
|
@ -1,11 +0,0 @@
|
|||||||
<section class="nav">
|
|
||||||
<a class="logo" href="/">
|
|
||||||
<img src="img/fr_logo.webp" alt="logo" />
|
|
||||||
</a>
|
|
||||||
<div class="links">
|
|
||||||
<a href="/home">Úvod</a>
|
|
||||||
<a href="/projects">Projekty</a>
|
|
||||||
<a href="/contact">Kontakt</a>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
@ -1,37 +0,0 @@
|
|||||||
.content {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form_contact {
|
|
||||||
--base-padding: .5rem 1rem;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
width: 15rem;
|
|
||||||
margin-top: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form_contact input {
|
|
||||||
padding: var(--base-padding);
|
|
||||||
margin-bottom: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form_contact button {
|
|
||||||
align-self: center;
|
|
||||||
padding: var(--base-padding);
|
|
||||||
margin-top: 1.5rem;
|
|
||||||
cursor: pointer;
|
|
||||||
background-color: white;
|
|
||||||
color: black;
|
|
||||||
}
|
|
||||||
|
|
||||||
.form_contact textarea {
|
|
||||||
height: 8rem;
|
|
||||||
resize: none;
|
|
||||||
padding: var(--base-padding);
|
|
||||||
}
|
|
||||||
|
|
||||||
.form_contact input, textarea, button {
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
@ -1,28 +0,0 @@
|
|||||||
.content {
|
|
||||||
margin-block: auto;
|
|
||||||
}
|
|
||||||
.home {
|
|
||||||
font-size: 1.2rem;
|
|
||||||
}
|
|
||||||
.home section {
|
|
||||||
text-align: center;
|
|
||||||
}
|
|
||||||
.home a {
|
|
||||||
color: lightblue;
|
|
||||||
cursor: pointer;
|
|
||||||
text-decoration: underline;
|
|
||||||
}
|
|
||||||
#pgp {
|
|
||||||
cursor: pointer;
|
|
||||||
}
|
|
||||||
#pgpmobile {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
@media (max-width: 600px) {
|
|
||||||
#pgp {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
#pgpmobile {
|
|
||||||
display: inline-block;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
.content h1 {
|
|
||||||
text-align: center;
|
|
||||||
margin-bottom: 2rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.projects {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
gap: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.projects img {
|
|
||||||
max-width: 100%;
|
|
||||||
display: block;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card {
|
|
||||||
display: flex;
|
|
||||||
border: 1px solid red;
|
|
||||||
border-radius: 15px;
|
|
||||||
box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 12px;
|
|
||||||
width: min(40rem, calc(100% - 1rem));
|
|
||||||
}
|
|
||||||
|
|
||||||
.card .card_text > * {
|
|
||||||
margin: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card > * {
|
|
||||||
flex-basis: 100%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card .card_left {
|
|
||||||
border: 1px solid green;
|
|
||||||
}
|
|
||||||
|
|
||||||
.card .card_right {
|
|
||||||
border: 1px solid yellow;
|
|
||||||
}
|
|
||||||
|
|
||||||
.technologies {
|
|
||||||
display: flex;
|
|
||||||
gap: 1rem;
|
|
||||||
flex-wrap: wrap;
|
|
||||||
}
|
|
||||||
|
|
||||||
.technologies span {
|
|
||||||
border: 1px solid white;
|
|
||||||
padding: .5rem;
|
|
||||||
border-radius: 5px;
|
|
||||||
}
|
|
@ -1,77 +0,0 @@
|
|||||||
* {
|
|
||||||
margin: 0;
|
|
||||||
padding: 0;
|
|
||||||
box-sizing: border-box;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
min-height: 100vh;
|
|
||||||
font-family: 'Source Code Pro', monospace;
|
|
||||||
background: var(--background);
|
|
||||||
color: var(--color);
|
|
||||||
}
|
|
||||||
|
|
||||||
html {
|
|
||||||
overflow-y: scroll !important;
|
|
||||||
text-rendering: optimizeLegibility;
|
|
||||||
-webkit-font-smoothing: antialiased;
|
|
||||||
scroll-behavior: smooth;
|
|
||||||
}
|
|
||||||
*::-webkit-scrollbar {
|
|
||||||
width: 5px;
|
|
||||||
}
|
|
||||||
*::-webkit-scrollbar-thumb {
|
|
||||||
background-color: #ffffff;
|
|
||||||
border-radius: 20px;
|
|
||||||
}
|
|
||||||
*::-webkit-scrollbar-track {
|
|
||||||
background: #000000;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav {
|
|
||||||
position: relative;
|
|
||||||
display: flex;
|
|
||||||
padding: 1rem;
|
|
||||||
justify-content: space-between;
|
|
||||||
isolation: isolate;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav .logo img {
|
|
||||||
height: 3rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
.nav .links {
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
gap: 1rem;
|
|
||||||
z-index: -1;
|
|
||||||
color: var(--color);
|
|
||||||
}
|
|
||||||
|
|
||||||
a { color: var(--color); }
|
|
||||||
a:visited { color: var(--color); }
|
|
||||||
a:hover { color: red; }
|
|
||||||
|
|
||||||
@media (min-width: 400px) {
|
|
||||||
.nav .links {
|
|
||||||
position: absolute;
|
|
||||||
inset: 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.content {
|
|
||||||
padding: 2rem 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
footer {
|
|
||||||
display: flex;
|
|
||||||
width: 100vw;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
align-self: flex-end;
|
|
||||||
margin-top: auto;
|
|
||||||
margin-bottom: 2rem;
|
|
||||||
}
|
|
@ -1,6 +0,0 @@
|
|||||||
body {
|
|
||||||
--base-padding: .5rem 1rem;
|
|
||||||
--base-margin: 2rem;
|
|
||||||
--background: #111111;
|
|
||||||
--color: #ffffff;
|
|
||||||
}
|
|
BIN
.old/img/fr.ico
BIN
.old/img/fr.ico
Binary file not shown.
Before Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
Before Width: | Height: | Size: 526 B |
@ -1,88 +0,0 @@
|
|||||||
<?php
|
|
||||||
$prod = false;
|
|
||||||
|
|
||||||
require_once("./libraries/router.php");
|
|
||||||
require_once("./libraries/console.php");
|
|
||||||
|
|
||||||
// Display Errors
|
|
||||||
ini_set('display_startup_errors', 1);
|
|
||||||
ini_set('display_errors', 1);
|
|
||||||
error_reporting(-1);
|
|
||||||
|
|
||||||
// Display var_dump
|
|
||||||
#var_dump($_SESSION);
|
|
||||||
|
|
||||||
// Date Time Zone
|
|
||||||
date_default_timezone_set('Europe/Prague');
|
|
||||||
|
|
||||||
// site info
|
|
||||||
$keywords = "Filip Rojek, rojek, vyvojar, developer, backend vyvojar, nodejs vyvojar, php vyvojar, web vyvojar, programator, linux administrator";
|
|
||||||
$description = "Linux user, backend web developer and student.";
|
|
||||||
$locale = "cs_CZ";
|
|
||||||
$title = "Filip Rojek | Developer";
|
|
||||||
$site_name = "Filip Rojek | Developer";
|
|
||||||
$author = "Fofrweb | https://fofrweb.com";
|
|
||||||
$email = "webmaster(@)fofrweb.com";
|
|
||||||
$canonical = "https://www.filiprojek.cz/";
|
|
||||||
?>
|
|
||||||
|
|
||||||
<!doctype html>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8" />
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1.0" />
|
|
||||||
<meta id="contentLanguage" http-equiv="Content-Language" content="<?= $locale ?>" />
|
|
||||||
<meta name="keywords" content="<?= $keywords ?>" />
|
|
||||||
<meta name="description" content="<?= $description ?>" />
|
|
||||||
<meta property="og:locale" content="<?= $locale ?>" />
|
|
||||||
<meta property="og:type" content="website" />
|
|
||||||
<meta property="og:title" content="<?= $title ?>" />
|
|
||||||
<meta property="og:description" content="<?= $description ?>" />
|
|
||||||
<meta property="og:site_name" content="<?= $site_name ?>" />
|
|
||||||
<meta name="author" content="<?= $author ?>" />
|
|
||||||
<meta name="email" content="<?= $email ?>" />
|
|
||||||
<meta name="copyright" content="<?= $copyright ?>" />
|
|
||||||
<meta name="expires" content="never" />
|
|
||||||
|
|
||||||
<?php
|
|
||||||
if($prod) { ?>
|
|
||||||
<meta name="robots" content="index,follow" />
|
|
||||||
<meta name="Seznambot" content="index,follow" />
|
|
||||||
<meta name="Googlebot" content="index,follow" />
|
|
||||||
<?php } else { ?>
|
|
||||||
<meta name="robots" content="noindex, nofollow" />
|
|
||||||
<meta name="Seznambot" content="noindex, nofollow" />
|
|
||||||
<meta name="Googlebot" content="noindex, nofollow" />
|
|
||||||
<?php } ?>
|
|
||||||
|
|
||||||
<title><?= $title ?></title>
|
|
||||||
<link rel="icon" type="image/x-icon" href="/img/fr.ico" />
|
|
||||||
<link rel="canonical" href="<?= $canonical ?>" />
|
|
||||||
<link rel="stylesheet" href="/css/style.css">
|
|
||||||
<link rel="stylesheet" href="/css/variables.css">
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<?php
|
|
||||||
require_once("./components/header.php");
|
|
||||||
?>
|
|
||||||
<section class="content">
|
|
||||||
<?php
|
|
||||||
$R = new Router();
|
|
||||||
$R->route('GET', '/', 'home');
|
|
||||||
$R->route('GET', '/home', 'home');
|
|
||||||
$R->route('GET', '/domu', 'home');
|
|
||||||
|
|
||||||
$R->route('POST', '/contact/send', 'contact');
|
|
||||||
|
|
||||||
$R = null;
|
|
||||||
?>
|
|
||||||
</section>
|
|
||||||
<footer>
|
|
||||||
<?php
|
|
||||||
require_once("./components/footer.php");
|
|
||||||
?>
|
|
||||||
</footer>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
|
|
@ -1,9 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
function console_log($data) {
|
|
||||||
$output = $data;
|
|
||||||
if (is_array($output))
|
|
||||||
$output = implode(',', $output);
|
|
||||||
|
|
||||||
echo "<script>console.log('Debug Objects: " . $output . "' );</script>";
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
<?php
|
|
||||||
class Mail {
|
|
||||||
public $from;
|
|
||||||
public $to;
|
|
||||||
public $subject;
|
|
||||||
public $message;
|
|
||||||
public $headers;
|
|
||||||
|
|
||||||
function __construct($from, $to, $subject, $message, $headers=null) {
|
|
||||||
$this->from = $from;
|
|
||||||
$this->to = $to;
|
|
||||||
$this->subject = $subject;
|
|
||||||
$this->headers = $headers;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function send() {
|
|
||||||
// odeslání e-mailu
|
|
||||||
$headers = 'From: noreply@fofrweb.com' . "\r\n" .
|
|
||||||
'Reply-To: support@fofrweb.com' . "\r\n" .
|
|
||||||
'X-Mailer: PHP/' . phpversion();
|
|
||||||
$this->headers = $headers;
|
|
||||||
|
|
||||||
if (gettype($this->message) == 'string') {
|
|
||||||
if(mail($this->to, $this->subject, $this->message, $this->headers)) {
|
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
<?php
|
|
||||||
class Router {
|
|
||||||
public $returned = false;
|
|
||||||
|
|
||||||
function route($method, $url, $filename) {
|
|
||||||
$methods = ['GET', 'POST'];
|
|
||||||
if(in_array($method, $methods)) {
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == $method) {
|
|
||||||
if ($_SERVER['REQUEST_URI'] == $url) {
|
|
||||||
require_once("./pages/$filename/$filename.php");
|
|
||||||
$this->returned = true;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function __destruct() {
|
|
||||||
if($_SERVER['REQUEST_METHOD'] == 'GET') {
|
|
||||||
if(!$this->returned){
|
|
||||||
$url = explode("/", $_SERVER['REQUEST_URI']);
|
|
||||||
$url = $url[count($url)-1];
|
|
||||||
|
|
||||||
if (file_exists("./pages/$url/$url.php")) {
|
|
||||||
require_once("./pages/$url/$url.php");
|
|
||||||
} else {
|
|
||||||
require_once("./pages/errors/404.php");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
<link rel="stylesheet" href="/css/contact.css">
|
|
||||||
<h1>Kontaktujte mě</h1>
|
|
||||||
|
|
||||||
<form class="form_contact" action="/contact/send" method="post" name="contact">
|
|
||||||
<label for="name">Vaše jméno:</label>
|
|
||||||
<input id="name" type="text" placeholder="Petr Novák" required autocomplete="on" />
|
|
||||||
|
|
||||||
<label for="email">Váš e-mail:</label>
|
|
||||||
<input id="email" type="email" placeholder="petr@novak.cz" required autocomplete="on" />
|
|
||||||
|
|
||||||
<label for="message">Zpráva:</label>
|
|
||||||
<textarea id="message" placeholder="Napište zprávu..." required></textarea>
|
|
||||||
|
|
||||||
<button type="button" id="submit">Odeslat zprávu</button>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const submit = document.querySelector("#submit")
|
|
||||||
submit.addEventListener("click", async (e) => {
|
|
||||||
e.preventDefault()
|
|
||||||
|
|
||||||
const formData = new FormData();
|
|
||||||
formData.append('name', document.querySelector("#name").value);
|
|
||||||
formData.append('email', document.querySelector("#email").value);
|
|
||||||
formData.append('message', document.querySelector("#message").value);
|
|
||||||
|
|
||||||
try {
|
|
||||||
await fetch('/contact/send', {
|
|
||||||
method: 'POST',
|
|
||||||
body: formData
|
|
||||||
});
|
|
||||||
console.log('Message sent successfully.')
|
|
||||||
} catch (err) {
|
|
||||||
console.error('Error:', error)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<?php
|
|
||||||
ini_set('log_errors', 1);
|
|
||||||
|
|
||||||
if(isset($_POST['email']) && isset($_POST['message'])) {
|
|
||||||
$email = $_POST['email'];
|
|
||||||
$message = $_POST['message'];
|
|
||||||
$name = $_POST['name'];
|
|
||||||
|
|
||||||
require_once(__DIR__ . "/../../libraries/mail.php");
|
|
||||||
$message = "Nová zpráva z webu filiprojek.cz\n\nOdesílatel: $email\nZpráva:\n$message";
|
|
||||||
$m = new Mail($_POST['email'], 'webmaster@filiprojek.cz', 'Nová zpráva z webu filiprojek.cz', $message);
|
|
||||||
|
|
||||||
if($m->send()) {
|
|
||||||
console_log("zprava odeslana");
|
|
||||||
header('Location: /?sent=true');
|
|
||||||
} else {
|
|
||||||
error_log("Message wasn't sent");
|
|
||||||
error_log(var_dump($m));
|
|
||||||
echo "<p>Něco se nepovedlo, zkuste to znovu... :(</p>";
|
|
||||||
echo "<a href='/'>Zpět</a>";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,2 +0,0 @@
|
|||||||
<h1>Error 404 - not found</h1>
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
|||||||
<link rel="stylesheet" href="./css/home.css" >
|
|
||||||
<section class="home">
|
|
||||||
<section>
|
|
||||||
<p>Filip Rojek <filip(at)filiprojek.cz></p>
|
|
||||||
<br>
|
|
||||||
<p>Backend node.js & php developer <a href="https://www.fofrweb.com/" target="_blank">@fofrweb</a>,<br> Linux Gentoo user, student and coffee enthusiast<span class="underscore">_</span><p>
|
|
||||||
<br>
|
|
||||||
<p id="pgp" title="copy pgp to clipboard">PGP: fc37b989787acf8cbce7c0c2a56a345efe321161</p>
|
|
||||||
<br>
|
|
||||||
<p><a href="https://git.filiprojek.cz/fr" target="_blank">Git</a> <a href="https://t.me/filiprojek" target="_blank">Telegram</a> <a href="#" id="pgpmobile" title="copy pgp to clipboard">PGP</a></p>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
const _ = document.querySelector(".underscore")
|
|
||||||
let b = false
|
|
||||||
setInterval(() => {
|
|
||||||
b ? _.style.visibility = "visible" : _.style.visibility = "hidden"
|
|
||||||
b = !b
|
|
||||||
}, 500)
|
|
||||||
|
|
||||||
const pgp = document.querySelector("#pgp")
|
|
||||||
const pgpmobile = document.querySelector("#pgpmobile")
|
|
||||||
const pgpcp = (e) => {
|
|
||||||
console.log(e)
|
|
||||||
navigator.clipboard.writeText("fc37b989787acf8cbce7c0c2a56a345efe321161")
|
|
||||||
alert("pgp has been copied to the clipboard")
|
|
||||||
}
|
|
||||||
|
|
||||||
pgp.addEventListener("click", pgpcp)
|
|
||||||
pgpmobile.addEventListener("click", pgpcp)
|
|
||||||
</script>
|
|
||||||
</section>
|
|
||||||
|
|
@ -1,107 +0,0 @@
|
|||||||
<link rel="stylesheet" href="/css/projects.css">
|
|
||||||
<h1>Projekty</h1>
|
|
||||||
|
|
||||||
<section class="projects">
|
|
||||||
<div class="card">
|
|
||||||
<div class="card_left card_text">
|
|
||||||
<p>pkmples.cz</p>
|
|
||||||
<p>Komerční webová stránka pro PKM PARTY PLES.</p>
|
|
||||||
<div class="technologies">
|
|
||||||
<span>PHP</span>
|
|
||||||
<span>Linux</span>
|
|
||||||
<span>Nginx</span>
|
|
||||||
</div>
|
|
||||||
<p>01/2023</p>
|
|
||||||
</div>
|
|
||||||
<div class="card_right">
|
|
||||||
<img src="https://www.fofrweb.com/images/pkm_two.png" alt="project screenshot">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card">
|
|
||||||
<div class="card_left">
|
|
||||||
<img src="https://www.fofrweb.com/images/rapidd.png" alt="project screenshot">
|
|
||||||
</div>
|
|
||||||
<div class="card_right card_text">
|
|
||||||
<p>rapiddglass.cz</p>
|
|
||||||
<p>Komerční webová stránka pro přípravek na ochranu a čištění krbového skla Rapidd Glass.</p>
|
|
||||||
<p>10/2022</p>
|
|
||||||
<div class="technologies">
|
|
||||||
<span>PHP</span>
|
|
||||||
<span>Linux</span>
|
|
||||||
<span>Nginx</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card">
|
|
||||||
<div class="card_left card_text">
|
|
||||||
<p>danielryslavy.cz</p>
|
|
||||||
<p>Komerční webová stránka osobního trenéra Daniela Ryšlavého.</p>
|
|
||||||
<p>06/2022</p>
|
|
||||||
<div class="technologies">
|
|
||||||
<span>PHP</span>
|
|
||||||
<span>Linux</span>
|
|
||||||
<span>Nginx</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card_right">
|
|
||||||
<img src="https://www.fofrweb.com/images/fitness.png" alt="project screenshot">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card">
|
|
||||||
<div class="card_left">
|
|
||||||
<img src="#" alt="project screenshot">
|
|
||||||
</div>
|
|
||||||
<div class="card_right card_text">
|
|
||||||
<p>Fofrmess</p>
|
|
||||||
<p>Chatovací realtime PWA aplikace.</p>
|
|
||||||
<p>02/2022</p>
|
|
||||||
<div class="technologies">
|
|
||||||
<span>Node.js</span>
|
|
||||||
<span>Express.js</span>
|
|
||||||
<span>PostgreSQL</span>
|
|
||||||
<span>Linux</span>
|
|
||||||
<span>Nginx</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card">
|
|
||||||
<div class="card_left card_text">
|
|
||||||
<p>Fofrtasks</p>
|
|
||||||
<p>Aplikace pro vytváření a správu poznámek a úkolů.</p>
|
|
||||||
<p>10/2021</p>
|
|
||||||
<div class="technologies">
|
|
||||||
<span>Node.js</span>
|
|
||||||
<span>Express.js</span>
|
|
||||||
<span>MongoDB</span>
|
|
||||||
<span>Linux</span>
|
|
||||||
<span>Nginx</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="card_right">
|
|
||||||
<img src="#" alt="project screenshot">
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="card">
|
|
||||||
<div class="card_left">
|
|
||||||
<img src="#" alt="project screenshot">
|
|
||||||
</div>
|
|
||||||
<div class="card_right card_text">
|
|
||||||
<p>Fofrbazar</p>
|
|
||||||
<p>Internetová bazarová platforma.</p>
|
|
||||||
<p>04/2021</p>
|
|
||||||
<div class="technologies">
|
|
||||||
<span>PHP</span>
|
|
||||||
<span>Laravel</span>
|
|
||||||
<span>MySQL</span>
|
|
||||||
<span>Linux</span>
|
|
||||||
<span>Apache</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user