4 Commits

Author SHA1 Message Date
b653d69e77 updating styles 2025-11-28 10:15:15 +10:00
6720bfd450 adding pages 2025-11-28 01:31:50 +10:00
726b6e7adb aboba mv node 2025-11-28 01:23:28 +10:00
093d57a619 starting hw 2025-11-28 01:23:09 +10:00
40 changed files with 7346 additions and 2783 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
node_modules
to_reform

View File

@@ -1,104 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
Embedded Details
</title>
</head>
<body bgcolor="#F0F8FF">
<details>
<summary>Menu</summary>
<ul>
<li><a href="./index.html">Home</a></li>
<li><a href="./embeded_details.html"><h4>Embeded Details</h4></a></li>
<li><a href="./opencv_details.html">OpenCV Details</a></li>
<li><a href="./photography_details.html">Photography Details</a></li>
<li><a href="./table.html">Table with filters (not working yet)</a></li>
<li><a href="./images/institute.png">Institute</a></li>
</ul>
</details>
<h2 align="center">Embedded Details</h2>
<hr width="800" align="center">
<p align="center">
<img src="./images/esp32.png" alt="ESP32" height="150">
<img src="./images/arduino.png" alt="Arduino" height="150">
<img src="./images/stm32.png" alt="STM32" height="150">
</p>
<p align="justify">My programming path started with embeded systems,
i love all the low level things that Mcu could do with just a little bit of code,
sometimes build or flashing progress could take some time to get a hand of , but after that everething usualy
goes smooth</p>
<p align="justify">The first MCU i tried was a ATmega328P,
after some time i was surprised with the debug capabilities on the Stm32
and now i'm working with esp32-s3 , that's a good chip, has internal JTAG and all the shiny wireless interfaces
but feels faulty
for some reason <i> regular segfaults with CDC</i></p>
<h3 align="center">Microcontroller Comparison Table</h3>
<table border="1" align="center" cellpadding="6" cellspacing="0">
<tr>
<th>Board/MCU</th>
<th>UART Count</th>
<th>Dynamic UART Assignment</th>
<th>ADC Channels</th>
<th>Debug Support</th>
<th>Flash Size</th>
<th>Wireless Connectivity</th>
</tr>
<tr>
<td>ESP32</td>
<td>3</td>
<td>Yes (via IO MUX)</td>
<td>18</td>
<td>JTAG, Serial</td>
<td>4MB (typical)</td>
<td>Wi-Fi, Bluetooth</td>
</tr>
<tr>
<td>ESP32-S3</td>
<td>3</td>
<td>Yes (via IO MUX)</td>
<td>20</td>
<td>JTAG, Serial</td>
<td>8MB (typical)</td>
<td>Wi-Fi, Bluetooth LE</td>
</tr>
<tr>
<td>ESP-01</td>
<td>1</td>
<td>No</td>
<td>1</td>
<td>Serial only</td>
<td>512KB/1MB</td>
<td>Wi-Fi</td>
</tr>
<tr>
<td>Arduino Uno (ATmega328P)</td>
<td>1</td>
<td>No</td>
<td>6</td>
<td>Serial, DebugWire</td>
<td>32KB</td>
<td>None</td>
</tr>
<tr>
<td>Blue Pill (STM32F103C8T6)</td>
<td>3</td>
<td>Yes (remappable)</td>
<td>10</td>
<td>SWD, Serial</td>
<td>64KB/128KB</td>
<td>None</td>
</tr>
</table>
<p align="right"> no rpi pico here , the build system has won over my temper</p>
</body>
</html>

View File

@@ -1,229 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/3.10.2/mdb.min.css" rel="stylesheet">
<script src="https://cdnjs.cloudflare.com/ajax/libs/mdb-ui-kit/3.10.2/mdb.min.js"></script>
<link href="labs/lab4/css/bootstrap.min.css" rel="stylesheet">
<script src="labs/lab4/js/bootstrap.bundle.min.js"></script>
<title>Portfolio</title>
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-expand-md bg-light navbar-light">
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item">
<a class="nav-link selected-menu px-3" href="./index.html">Home</a>
</li>
<li class="nav-item">
<a class="nav-link px-3" href="./embeded_details.html">Embedded</a>
</li>
<li class="nav-item">
<a class="nav-link px-3" href="./opencv_details.html">OpenCV</a>
</li>
<li class="nav-item">
<a class="nav-link px-3" href="./photography_details.html">Photography</a>
</li>
<li class="nav-item">
<a class="nav-link px-3" href="./table.html">Table</a>
</li>
<li class="nav-item">
<a class="nav-link px-3" href="./images/institute.png">Institute</a>
</li>
</ul>
</div>
</nav>
<!-- Image Gallery -->
<div class="container-fluid my-4 text-center">
<div class="row g-2">
<div class="col-lg-4 col-md-12">
<div class="hover-overlay">
<img src="./images/sqarucos.png" class="img-fluid border border-dark hover-shadow w-100 mt-0 mt-lg-2" alt="Arduino">
</div>
</div>
<div class="col-lg-4 col-md-12">
<div class="hover-overlay">
<img src="./images/sqstm32.png" class="img-fluid border border-dark hover-shadow w-100" alt="STM32">
</div>
</div>
<div class="col-lg-4 col-md-12">
<div class="hover-overlay">
<img src="./images/sqesp32.png" class="img-fluid border border-dark hover-shadow w-100 mt-0 mt-lg-2" alt="ESP32">
</div>
</div>
</div>
</div>
<!-- Main Content -->
<div class="container-fluid">
<div class="row">
<!-- Main Content Area -->
<div class="col-lg-9 col-md-12">
<!-- First Block -->
<div class="card mb-4">
<div class="card-header text-center">
<h5 class="fw-bold mb-0">Embedded Systems</h5>
</div>
<div class="card-body">
<div class="row align-items-center">
<div class="col-lg-4 col-md-12 mb-3">
<p class="text-justify">
Had several projects with different MCUs and wrote firmware for them.
My main stack consists of Platformio+EspIdf or Arduino, also tried STM32
</p>
</div>
<div class="col-lg-4 col-md-12 mb-3">
<p class="text-justify">
I love embedded development because of autonomy of produced devices, the devices are
not
dependent on any other hardware and can work autonomously
</p>
<a href="#" class="text-decoration-none small d-block text-end">More info»</a>
</div>
<div class="col-lg-4 col-md-12 mb-3">
<img src="./images/AQ_monitor.png" class="img-fluid" alt="ESP32">
</div>
</div>
</div>
</div>
<!-- Second Block -->
<div class="card mb-4">
<div class="card-header text-center">
<h5 class="fw-bold mb-0">Embedded Systems</h5>
</div>
<div class="card-body">
<div class="row align-items-center">
<div class="col-lg-3 col-md-12 mb-3">
<p class="text-justify">
Had several projects with different MCUs and wrote firmware for them.
My main stack consists of Platformio+EspIdf or Arduino, also tried STM32
</p>
</div>
<div class="col-lg-6 col-md-12 mb-3 text-center">
<img src="./images/remote.jpeg" class="img-fluid" alt="Remote">
</div>
<div class="col-lg-3 col-md-12 mb-3">
<p class="text-justify">
I love embedded development because of autonomy of produced devices, the devices
are not dependent on any other hardware and can work autonomously or off the grid
</p>
<a href="#" class="text-decoration-none small d-block text-end">More info»</a>
</div>
</div>
</div>
</div>
</div>
<!-- Sidebar -->
<div class="col-lg-3 col-md-12 border-start">
<!-- Small Info Block 1 -->
<div class="card mb-3 mt-lg-0 mt-3">
<div class="row g-0">
<div class="col-md-8 col-lg-12 col-xl-8">
<div class="card-body p-3">
<h6 class="card-title fw-bold text-end">3D Printer</h6>
<p class="card-text small text-justify">
3D printers are versatile tools used for creating prototypes,
custom parts, and artistic designs. They work by layering materials.
</p>
<a href="#" class="text-decoration-none small d-block text-end">More Info»</a>
</div>
</div>
<div class="col-md-4 col-lg-12 col-xl-4">
<div class="hover-overlay">
<img src="images/16x10/3d-printer.jpeg" class="img-fluid hover-zoom" alt="3D Printer">
<div class="mask" style="background-color: rgba(63, 107, 69, 0.2);"></div>
</div>
</div>
</div>
</div>
<!-- Small Info Block 2 -->
<div class="card mb-3">
<div class="row g-0">
<div class="col-md-8 col-lg-12 col-xl-8">
<div class="card-body p-3">
<h6 class="card-title fw-bold text-end">BLHeli ESCs</h6>
<p class="card-text small text-justify">
BLHeli ESCs are electronic speed controllers designed
for drones, offering smooth and precise motor control.
</p>
<a href="#" class="text-decoration-none small d-block text-end">More Info»</a>
</div>
</div>
<div class="col-md-4 col-lg-12 col-xl-4">
<div class="hover-overlay">
<img src="images/16x10/blheli-esc.jpeg" class="img-fluid hover-zoom" alt="BLHeli ESC">
<div class="mask" style="background-color: rgba(57, 192, 237, 0.2);"></div>
</div>
</div>
</div>
</div>
<!-- Small Info Block 3 -->
<div class="card mb-3">
<div class="row g-0">
<div class="col-md-8 col-lg-12 col-xl-8">
<div class="card-body p-3">
<h6 class="card-title fw-bold text-end">Raspberry Pi Nano</h6>
<p class="card-text small text-justify">
Raspberry Pi Nano is a compact computer ideal for learning,
prototyping, and IoT projects. It is highly energy-efficient.
</p>
<a href="#" class="text-decoration-none small d-block text-end">More Info»</a>
</div>
</div>
<div class="col-md-4 col-lg-12 col-xl-4">
<div class="hover-overlay">
<img src="images/16x10/rpi-nano.jpeg" class="img-fluid hover-zoom"
alt="Raspberry Pi Nano">
<div class="mask" style="background-color: rgba(57, 192, 237, 0.2);"></div>
</div>
</div>
</div>
</div>
<!-- Small Info Block 4 -->
<div class="card mb-3">
<div class="row g-0">
<div class="col-md-8 col-lg-12 col-xl-8">
<div class="card-body p-3">
<h6 class="card-title fw-bold text-end">Smart Thermostats</h6>
<p class="card-text small text-justify">
Smart thermostats help regulate home temperatures efficiently,
saving energy and enhancing comfort with automation.
</p>
<a href="#" class="text-decoration-none small d-block text-end">More Info»</a>
</div>
</div>
<div class="col-md-4 col-lg-12 col-xl-4">
<div class="hover-overlay">
<img src="images/16x10/thermostat.jpeg" class="img-fluid hover-zoom"
alt="Smart Thermostat">
<div class="mask" style="background-color: rgba(57, 192, 237, 0.2);"></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container-fluid bg-light">
<span class="lead p-4 ">Kulesh A.</span>
<span class="lead p-4 "> Б9123-09.03.04</span>
</div>
</body>
</html>

View File

@@ -1,48 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
OpenCV Details
</title>
</head>
<body bgcolor="#F0F8FF">
<details>
<summary>Menu</summary>
<ul>
<li><a href="./index.html">Home</a></li>
<li><a href="./embeded_details.html"><h4>Embeded Details</h4></a></li>
<li><a href="./opencv_details.html">OpenCV Details</a></li>
<li><a href="./photography_details.html">Photography Details</a></li>
<li><a href="./table.html">Table with filters (not working yet)</a></li>
<li><a href="./images/institute.png">Institute</a></li>
</ul>
</details>
<h2 align="center">OpenCV Details</h2>
<hr width="800" align="center">
<p align="center">
<img src="./images/opencv.png" alt="OpenCV" height="150" align="top">
as mentioned before i love when programs are able to <i>see</i> things <br>
my experience with opencv started with simple hight level functions like detectCircle or findContours and
etc...<br>
Right now i'm crawling deeper into the library , and the idea of standartisation of parameters between different
cameras is appealig to me <br>
so i'm trying to understand how all that works from the math side<br>
Additionally, I'm exploring Re-Identification (ReId) techniques,
they are used for recognizing and tracking objects across different camera views or consecutive frames.
</p>
<hr width="500" align="center">
<p>
One of many projects I've worked on is <a href="https://github.com/OkunElya/ArucoNGP-MapCreator"
target="_blank">ArucoNGP-MapCreator</a>.<br>
The idea was to create a relative map of Aruco markers just from photos of pairs (or more) of them.<br>
It can also estimate the camera's position in the world relative to a specific marker, using only images
containing any marker.<br>
It was also my first deep dive into linear algebra.<br>
</p>
</body>
</html>

6695
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

30
package.json Normal file
View File

@@ -0,0 +1,30 @@
{
"name": "template_pug",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"build": "webpack --mode production",
"serve": "webpack serve --open --mode development",
"dev": "webpack --mode development",
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"chokidar": "^4.0.3",
"css-loader": "^6.8.1",
"filemanager-webpack-plugin": "^8.0.0",
"glob": "^11.0.3",
"html-webpack-plugin": "^5.5.3",
"pug": "^2.0.4",
"pug-loader": "^2.4.0",
"style-loader": "^3.3.3",
"stylus": "^0.61.0",
"stylus-loader": "^7.1.3",
"webpack": "^5.89.0",
"webpack-cli": "^5.1.4",
"webpack-dev-server": "^4.15.1"
}
}

View File

@@ -1,42 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
Photography Details
</title>
</head>
<body bgcolor="#F0F8FF">
<details>
<summary>Menu</summary>
<ul>
<li><a href="./index.html">Home</a></li>
<li><a href="./embeded_details.html">Embeded Details</a></li>
<li><a href="./opencv_details.html">OpenCV Details</a></li>
<li><a href="./photography_details.html"><h4>Photography Details</h4></a></li>
<li><a href="./table.html">Table with filters (not working yet)</a></li>
<li><a href="./images/institute.png">Institute))</a></li>
</ul>
</details>
<h2 align="center">Photography Details</h2>
<hr width="800" align="center">
<p align="center">
Usually i capture landcape scenes with SLR camera, the main workhorse is Nikon D3100 with kit and 70-210mm
</p>
<p align="center">
<img src="images/photos/image0.png" alt="Photo 0" width="200">
<img src="images/photos/image1.png" alt="Photo 1" width="200">
<img src="images/photos/image2.png" alt="Photo 2" width="200">
</p>
<p align="center">
<img src="images/photos/image3.png" alt="Photo 3" width="200">
<img src="images/photos/image4.png" alt="Photo 4" width="200">
<img src="images/photos/image5.png" alt="Photo 5" width="200">
</p>
</body>
</html>

81
src/components/data.pug Normal file
View File

@@ -0,0 +1,81 @@
-
const pages = {
embedded: {
title: 'Embedded Details',
slug: 'embedded',
menuTitle: 'Embeded Details',
images: [
{ src: './images/esp32.png', alt: 'ESP32', height: 150 },
{ src: './images/arduino.png', alt: 'Arduino', height: 150 },
{ src: './images/stm32.png', alt: 'STM32', height: 150 }
],
paragraphs: [
"My programming path started with embeded systems, i love all the low level things that Mcu could do with just a little bit of code, sometimes build or flashing progress could take some time to get a hand of , but after that everething usualy goes smooth",
"The first MCU i tried was a ATmega328P, after some time i was surprised with the debug capabilities on the Stm32 and now i'm working with esp32-s3 , that's a good chip, has internal JTAG and all the shiny wireless interfaces but feels faulty for some reason <i>regular segfaults with CDC</i>"
],
table: {
title: 'Microcontroller Comparison Table',
headers: ['Board/MCU', 'UART Count', 'Dynamic UART Assignment', 'ADC Channels', 'Debug Support', 'Flash Size', 'Wireless Connectivity'],
rows: [
['ESP32', '3', 'Yes (via IO MUX)', '18', 'JTAG, Serial', '4MB (typical)', 'Wi-Fi, Bluetooth'],
['ESP32-S3', '3', 'Yes (via IO MUX)', '20', 'JTAG, Serial', '8MB (typical)', 'Wi-Fi, Bluetooth LE'],
['ESP-01', '1', 'No', '1', 'Serial only', '512KB/1MB', 'Wi-Fi'],
['Arduino Uno (ATmega328P)', '1', 'No', '6', 'Serial, DebugWire', '32KB', 'None'],
['Blue Pill (STM32F103C8T6)', '3', 'Yes (remappable)', '10', 'SWD, Serial', '64KB/128KB', 'None']
]
},
footer: "no rpi pico here , the build system has won over my temper"
},
opencv: {
title: 'OpenCV Details',
slug: 'opencv',
menuTitle: 'OpenCV Details',
images: [
{ src: './images/opencv.png', alt: 'OpenCV', height: 150 }
],
paragraphs: [
"as mentioned before i love when programs are able to <i>see</i> things",
"my experience with opencv started with simple hight level functions like detectCircle or findContours and etc...",
"Right now i'm crawling deeper into the library , and the idea of standartisation of parameters between different cameras is appealig to me",
"so i'm trying to understand how all that works from the math side",
"Additionally, I'm exploring Re-Identification (ReId) techniques, they are used for recognizing and tracking objects across different camera views or consecutive frames."
],
content: {
type: 'text',
text: "One of many projects I've worked on is <a href=\"https://github.com/OkunElya/ArucoNGP-MapCreator\" target=\"_blank\">ArucoNGP-MapCreator</a>.<br>The idea was to create a relative map of Aruco markers just from photos of pairs (or more) of them.<br>It can also estimate the camera's position in the world relative to a specific marker, using only images containing any marker.<br>It was also my first deep dive into linear algebra."
}
},
photography: {
title: 'Photography Details',
slug: 'photography',
menuTitle: 'Photography Details',
images: [],
paragraphs: [
"Usually i capture landcape scenes with SLR camera, the main workhorse is Nikon D3100 with kit and 70-210mm"
],
gallery: [
[
{ src: 'images/photos/image0.png', alt: 'Photo 0', width: 200 },
{ src: 'images/photos/image1.png', alt: 'Photo 1', width: 200 },
{ src: 'images/photos/image2.png', alt: 'Photo 2', width: 200 }
],
[
{ src: 'images/photos/image3.png', alt: 'Photo 3', width: 200 },
{ src: 'images/photos/image4.png', alt: 'Photo 4', width: 200 },
{ src: 'images/photos/image5.png', alt: 'Photo 5', width: 200 }
]
]
}
};
-
const menu = [
{ href: './index.html', title: 'Home' },
{ href: './embeded_details.html', title: 'Embeded Details' },
{ href: './opencv_details.html', title: 'OpenCV Details' },
{ href: './photography_details.html', title: 'Photography Details' },
{ href: './table.html', title: 'Table with filters (not working yet)' },
{ href: './images/institute.png', title: 'Institute' }
];

View File

@@ -0,0 +1,69 @@
include data.pug
mixin detailsPage(pageData)
doctype html
html(lang="en")
head
meta(charset="UTF-8")
title= pageData.title
body(bgcolor="#F0F8FF")
//- Menu
details
summary Menu
ul
each item in menu
li
if item.title === pageData.menuTitle
a(href=item.href)
h4= item.title
else
a(href=item.href)= item.title
//- Page Title
h2(align="center")= pageData.title
hr(width="800" align="center")
//- Header Images
if pageData.images && pageData.images.length > 0
p(align="center")
each img in pageData.images
if img.height
img(src=img.src alt=img.alt height=img.height)
else if img.width
img(src=img.src alt=img.alt width=img.width)
else
img(src=img.src alt=img.alt)
//- Paragraphs
if pageData.paragraphs
each para in pageData.paragraphs
p(align="justify")!= para
//- Table (for embedded page)
if pageData.table
h3(align="center")= pageData.table.title
table(border="1" align="center" cellpadding="6" cellspacing="0")
tr
each header in pageData.table.headers
th= header
each row in pageData.table.rows
tr
each cell in row
td= cell
//- Content (for opencv page)
if pageData.content
hr(width="500" align="center")
p!= pageData.content.text
//- Gallery (for photography page)
if pageData.gallery
each row in pageData.gallery
p(align="center")
each img in row
img(src=img.src alt=img.alt width=img.width)
//- Footer
if pageData.footer
p(align="right")= pageData.footer

View File

Before

Width:  |  Height:  |  Size: 198 KiB

After

Width:  |  Height:  |  Size: 198 KiB

View File

Before

Width:  |  Height:  |  Size: 159 KiB

After

Width:  |  Height:  |  Size: 159 KiB

View File

Before

Width:  |  Height:  |  Size: 106 KiB

After

Width:  |  Height:  |  Size: 106 KiB

View File

Before

Width:  |  Height:  |  Size: 229 KiB

After

Width:  |  Height:  |  Size: 229 KiB

View File

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

View File

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 10 KiB

View File

Before

Width:  |  Height:  |  Size: 1.2 MiB

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

Before

Width:  |  Height:  |  Size: 80 KiB

After

Width:  |  Height:  |  Size: 80 KiB

View File

Before

Width:  |  Height:  |  Size: 347 KiB

After

Width:  |  Height:  |  Size: 347 KiB

View File

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 41 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.1 MiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 2.3 MiB

After

Width:  |  Height:  |  Size: 2.3 MiB

View File

Before

Width:  |  Height:  |  Size: 5.2 MiB

After

Width:  |  Height:  |  Size: 5.2 MiB

View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 MiB

After

Width:  |  Height:  |  Size: 3.9 MiB

View File

Before

Width:  |  Height:  |  Size: 4.4 MiB

After

Width:  |  Height:  |  Size: 4.4 MiB

View File

Before

Width:  |  Height:  |  Size: 1.9 MiB

After

Width:  |  Height:  |  Size: 1.9 MiB

View File

Before

Width:  |  Height:  |  Size: 65 KiB

After

Width:  |  Height:  |  Size: 65 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 99 KiB

After

Width:  |  Height:  |  Size: 99 KiB

1
src/index.js Normal file
View File

@@ -0,0 +1 @@
import './styles/main.styl'

140
src/pages/index.pug Normal file
View File

@@ -0,0 +1,140 @@
-
const menuItems = [
{ href: './index.html', title: 'Home', isActive: true },
{ href: './embeded_details.html', title: 'Embedded' },
{ href: './opencv_details.html', title: 'OpenCV' },
{ href: './photography_details.html', title: 'Photography' },
{ href: './table.html', title: 'Table' },
{ href: './images/institute.png', title: 'Institute' }
];
const galleryImages = [
{ src: './images/sqarucos.png', alt: 'Arduino' },
{ src: './images/sqstm32.png', alt: 'STM32' },
{ src: './images/sqesp32.png', alt: 'ESP32' }
];
const contentBlocks = [
{
title: 'Embedded Systems',
image: './images/AQ_monitor.png',
imageAlt: 'ESP32',
columns: [
{ text: 'Had several projects with different MCUs and wrote firmware for them. My main stack consists of Platformio+EspIdf or Arduino, also tried STM32' },
{ text: 'I love embedded development because of autonomy of produced devices, the devices are not dependent on any other hardware and can work autonomously', hasLink: true }
]
},
{
title: 'Embedded Systems',
image: './images/remote.jpeg',
imageAlt: 'Remote',
imageCenter: true,
columns: [
{ text: 'Had several projects with different MCUs and wrote firmware for them. My main stack consists of Platformio+EspIdf or Arduino, also tried STM32' },
{ text: 'I love embedded development because of autonomy of produced devices, the devices are not dependent on any other hardware and can work autonomously or off the grid', hasLink: true }
]
}
];
const sidebarBlocks = [
{
title: '3D Printer',
text: '3D printers are versatile tools used for creating prototypes, custom parts, and artistic designs. They work by layering materials.',
image: 'images/16x10/3d-printer.jpeg',
alt: '3D Printer'
},
{
title: 'BLHeli ESCs',
text: 'BLHeli ESCs are electronic speed controllers designed for drones, offering smooth and precise motor control.',
image: 'images/16x10/blheli-esc.jpeg',
alt: 'BLHeli ESC'
},
{
title: 'Raspberry Pi Nano',
text: 'Raspberry Pi Nano is a compact computer ideal for learning, prototyping, and IoT projects. It is highly energy-efficient.',
image: 'images/16x10/rpi-nano.jpeg',
alt: 'Raspberry Pi Nano'
},
{
title: 'Smart Thermostats',
text: 'Smart thermostats help regulate home temperatures efficiently, saving energy and enhancing comfort with automation.',
image: 'images/16x10/thermostat.jpeg',
alt: 'Smart Thermostat'
}
];
mixin nav-menu(items)
nav.nav
ul.nav__list
each item in items
li.nav__item
a.nav__link(href=item.href class=item.isActive ? 'nav__link--active' : '')= item.title
mixin gallery(images)
.gallery
each img in images
.gallery__item
img.gallery__image(src=img.src alt=img.alt)
mixin content-block(block, index)
.content-block
.content-block__header
h5.content-block__title= block.title
.content-block__body(class=`content-block__body--layout-${index % 2 === 0 ? 'a' : 'b'}`)
if index % 2 === 0
each col in block.columns
.content-block__column
p.content-block__text= col.text
if col.hasLink
a.content-block__link(href="#") More info»
.content-block__column.content-block__column--image
img.content-block__image(src=block.image alt=block.imageAlt)
else
.content-block__column
p.content-block__text= block.columns[0].text
.content-block__column.content-block__column--image-center
img.content-block__image(src=block.image alt=block.imageAlt)
.content-block__column
p.content-block__text= block.columns[1].text
if block.columns[1].hasLink
a.content-block__link(href="#") More info»
mixin sidebar-card(card)
.sidebar-card
.sidebar-card__content
h6.sidebar-card__title= card.title
p.sidebar-card__text= card.text
a.sidebar-card__link(href="#") More Info»
.sidebar-card__image-wrapper
img.sidebar-card__image(src=card.image alt=card.alt)
doctype html
html(lang="en")
head
meta(charset="UTF-8")
meta(name="viewport" content="width=device-width, initial-scale=1")
link(rel="stylesheet" href="styles/index.css")
title Portfolio
body.page
//- Navigation
+nav-menu(menuItems)
//- Image Gallery
+gallery(galleryImages)
//- Main Content
.main
.main__content
each block, index in contentBlocks
+content-block(block, index)
//- Sidebar
.main__sidebar
each card in sidebarBlocks
+sidebar-card(card)
//- Footer
footer.footer
span.footer__text Kulesh A.
span.footer__text Б9123-09.03.04

259
src/styles/index.styl Normal file
View File

@@ -0,0 +1,259 @@
// Variables
$color-bg = #F0F8FF
$color-text = black
$color-primary = green
$color-border = silver
$color-footer-bg = #f8f9fa
$border-thin = 1px solid black
$border-double = double 4px silver
$border-double-thick = double thick silver
$spacing-sm = 10px
$spacing-md = 20px
$spacing-lg = 30px
$spacing-xl = 50px
$breakpoint-mobile = 800px
$breakpoint-tablet = 1000px
// Mixins
flex-center()
display flex
align-items center
justify-content center
text-justify()
text-align justify
border-block()
border $border-thin
padding 2vw
margin 1vw 0
// Base
*
box-sizing border-box
margin 0
padding 0
.page
font-family Arial, sans-serif
background-color $color-bg
color $color-text
// Navigation (БЭМ)
.nav
border-top $border-double-thick
border-bottom $border-double-thick
&__list
display grid
grid-template-columns repeat(7, min-content)
grid-template-rows 1fr
justify-items start
list-style none
font-size 0
@media screen and (max-width: $breakpoint-mobile)
grid-template-columns 1fr 1fr
grid-template-rows 1fr 1fr 1fr
justify-items center
&__item
display inline-block
&__link
display block
width max-content
height 3em
line-height 3em
text-align center
padding 0 $spacing-sm
margin 0 $spacing-sm
color $color-text
text-decoration none
font-size medium
overflow hidden
text-overflow ellipsis
&--active
color $color-primary
font-weight bold
border-left $border-double
border-right $border-double
@media screen and (max-width: $breakpoint-mobile)
border-left none
border-right none
border-bottom $border-double-thick
// Gallery (БЭМ)
.gallery
display flex
flex-direction row
width 90%
margin auto
gap 0
@media screen and (max-width: $breakpoint-mobile)
flex-direction column
width 100%
&__item
flex 1
margin auto
&__image
width 100%
height auto
border $border-thin
&:nth-child(odd)
margin-top $spacing-sm
@media screen and (max-width: $breakpoint-mobile)
margin-top 0
// Main Layout (БЭМ)
.main
display grid
grid-template-columns 3fr 1fr
grid-template-rows 1fr
gap 0
@media screen and (max-width: $breakpoint-mobile)
display flex
flex-direction column
&__content
padding-right 0
&__sidebar
border-left $border-thin
margin $spacing-lg 0 0 $spacing-xl
padding-left $spacing-md
@media screen and (max-width: $breakpoint-mobile)
border-left none
margin $spacing-lg 0 0 0
padding-left 0
// Content Block (БЭМ)
.content-block
border-block()
&__header
text-align center
margin-bottom 1vw
&__title
font-weight bold
font-size 1.2em
&__body
&--layout-a
display grid
grid-template-columns 3fr 3fr 2fr
grid-template-rows 1fr
@media screen and (max-width: $breakpoint-mobile)
display flex
flex-direction column
&--layout-b
display grid
grid-template-columns 4fr 7fr 4fr
grid-template-rows 1fr
@media screen and (max-width: $breakpoint-mobile)
display flex
flex-direction column
&__column
margin 2vw
&--image
flex-center()
&--image-center
flex-center()
grid-column 2
&__text
text-justify()
&__image
width 100%
height auto
&__link
display block
text-align right
margin-top $spacing-sm
color $color-text
text-decoration none
font-size 0.9em
&:hover
text-decoration underline
// Sidebar Card (БЭМ)
.sidebar-card
display grid
grid-template-columns 1fr 1fr
grid-template-rows auto
margin $spacing-md $spacing-sm 0
gap $spacing-sm
@media screen and (max-width: $breakpoint-tablet)
display flex
flex-direction column
&__content
display flex
flex-direction column
justify-content space-between
&__title
font-weight bold
text-align right
margin-bottom $spacing-sm
&__text
text-justify()
font-size 0.9em
margin-bottom $spacing-sm
&__link
display block
text-align right
color $color-text
text-decoration none
font-size 0.85em
&:hover
text-decoration underline
&__image-wrapper
overflow hidden
&__image
width 100%
height auto
display block
transition transform 0.3s ease
&:hover
transform scale(1.05)
// Footer (БЭМ)
.footer
background-color $color-footer-bg
padding 1em 2em
margin-top $spacing-lg
display flex
gap 2em
&__text
font-size 1.1em

2360
table.html

File diff suppressed because it is too large Load Diff

69
webpack.config.js Normal file
View File

@@ -0,0 +1,69 @@
const HtmlWebpackPlugin = require("html-webpack-plugin");
const FileManagerPlugin = require("filemanager-webpack-plugin");
const path = require("path");
const fs = require("fs");
const pagesDir = path.join(__dirname, "src", "pages");
const pages = fs.readdirSync(pagesDir).filter(file => file.endsWith(".pug"));
module.exports = {
output: {
path: path.join(__dirname, "dist"),
filename: "index.[contenthash].js",
assetModuleFilename: path.join("images", "[name].[contenthash][ext]"),
},
entry: path.join(__dirname, "src", "index.js"),
module: {
rules: [
{
test: /\.pug$/,
loader: "pug-loader",
},
{
test: /\.(png|jpg|jpeg|gif)$/i,
type: "asset/resource",
},
{
test: /\.svg$/,
type: "asset/resource",
generator: {
filename: path.join("icons", "[name].[contenthash][ext]"),
},
},
{
test: /\.styl$/,
use: [
{
loader: "style-loader",
},
{
loader: "css-loader",
},
{
loader: "stylus-loader",
},
],
},
],
},
plugins: [
...pages.map(
(page) =>
new HtmlWebpackPlugin({
template: path.join(pagesDir, page),
filename: page.replace(".pug", ".html"),
})
),
new FileManagerPlugin({
events: {
onStart: {
delete: ["dist"],
},
},
}),
],
devServer: {
watchFiles: path.join(__dirname, "src"),
port: 9000,
},
};