diff --git a/about.html b/about.html index df24531..36e1722 100644 --- a/about.html +++ b/about.html @@ -4,7 +4,7 @@ About — Ertunç Özbay - + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -42,10 +42,10 @@
- ABOUT // IDENTITY & APPROACH -

About Me & This Workshop

+ ⚡ ABOUT // IDENTITY & ENGINEERING APPROACH +

About Me & This Engineering Studio

- I am a student who enjoys building things, understanding systems, and learning by going deeper than the first explanation. + I am an Electrical & Electronics Engineering student at Bülent Ecevit University who builds hardware, writes low-level C and Rust software, and learns by going deeper than the first explanation.

@@ -53,21 +53,18 @@

Learning by Building and Investigating

- My interests span both hardware and software. I do not want to limit myself to only one layer of a system. I want to understand how physical components, electronics, firmware, and higher-level software work together. + My interests span both hardware and software. I do not want to limit myself to only one layer of a system—I want to understand how physical components, electronics, firmware, and higher-level software work together.

- I am currently studying embedded systems, circuit analysis, C programming, and technical reporting. In the future, I want to study Assembly and continue developing my programming skills with C++, Python, Rust, and other technologies. + Right now, my active work centers on ESP32 / ESP32-S3 embedded systems in ESP-IDF (ISO C99 & FreeRTOS), circuit analysis, KiCad schematic capture, Python hardware tooling, and Rust systems programming on Arch Linux.

- I love open source, freedom, and making things that are useful, unusual, or simply fun. I am using this website to document my progress, express myself, share what I build, and find people who enjoy learning and creating together. -

-

- I am currently studying Electrical and Electronics Engineering at Bülent Ecevit University. I am still exploring my exact future specialization, but I am especially interested in areas where hardware, software, human judgment, and practical engineering meet. + I love open source, freedom, and making things that are useful, unusual, or simply fun. I use this website to document my progress, share real schematics and firmware, and connect with people who enjoy building and learning together.

- Diagram showing three connected layers: Layer 1 Circuits and Electronics, Layer 2 Embedded and Low-Level C Programming, and Layer 3 Tools and Human Judgment. + Diagram showing three connected layers: Layer 1 Circuits and Electronics, Layer 2 Embedded and Low-Level C Programming, and Layer 3 Tools and Human Judgment.
Connecting physical circuits, low-level code, and high-level software tools rather than treating them as separate worlds.
@@ -88,68 +85,54 @@ I often think about technology through a simple car analogy: if I want to drive a car responsibly, I should understand at least the basics of its steering, dynamics, brakes, and other important systems. If I understand how the car works and how to drive it, I can make good decisions, recognize problems early, teach someone else, and know what to ask for when something needs attention.

- I want to approach AI in the exact same way. I know AI is changing both hardware and software workflows, and I use AI tools when experimenting. However, I do not want to use AI blindly. I want to understand systems deeply enough to guide AI, evaluate its output, recognize mistakes, and take responsibility for the final result. -

- - -
- -

Learning Reverse Engineering Honestly

-

- I am also interested in reverse engineering, and I am interested in understanding how software and systems work internally. I am still learning reverse engineering and experimenting with reverse-engineering tools—I do not pretend to be an expert. -

-

- So far, I have experimented with tools such as Cheat Engine, Ghidra, and x64dbg to investigate and configure aspects of online game mechanics. In some of those experiments, AI tools generated or helped with parts of the code, and I did not yet fully understand every part of the underlying code that was produced. -

-

- Being honest about that gap is important to me: that experience is actually what pushed me to study low-level programming, C, and future Assembly more seriously. My goal is not to pretend that I already understand everything—my goal is to understand more each time I investigate a system. + I approach AI in the exact same way. I use AI tools when experimenting, but I do not want to use AI blindly—I want to understand the hardware registers, pin strapping rules, and software architecture deeply enough to evaluate output critically and take full responsibility for the final system.

- -

Areas I Am Studying & Exploring

+ +

Areas I Am Building & Exploring

-
+
+

Current Focus

    -
  • Hardware and software interaction
  • -
  • Embedded systems & microcontrollers
  • -
  • Electronics & circuit analysis
  • -
  • C programming
  • -
  • Building and testing real systems on breadboards
  • -
  • Technical documentation and reporting
  • +
  • ESP32 & ESP32-S3 (ESP-IDF v5.2.2, FreeRTOS)
  • +
  • ISO C99 firmware & SPI/ADC/LEDC/PCNT peripherals
  • +
  • 2.4 GHz nRF24L01+ RF telemetry & power decoupling
  • +
  • KiCad schematic capture & perfboard prototyping
-
+
-

Next Learning Milestones

+ +

Software & Reverse Engineering

    -
  • Assembly language fundamentals
  • -
  • Deeper C++ and systems programming
  • -
  • Python for tooling and conversion scripts
  • -
  • Rust for reliable systems software
  • -
  • Learning reverse engineering (Cheat Engine, Ghidra, x64dbg)
  • +
  • Rust & C++ systems programming on Arch Linux
  • +
  • Python RLE data compression & hardware scripts
  • +
  • Wine / DirectX 11 runtime internals & TLS alignment
  • +
  • Binary analysis (Ghidra, x64dbg, Cheat Engine)
-
+
-

Future Directions Under Exploration

+ +

Next Milestones

    -
  • Embedded systems & physical computing
  • -
  • Robotics, RC vehicles, and autonomous systems
  • -
  • Firmware analysis & hardware-software security
  • -
  • Open-source hardware and software tools
  • +
  • DT-100 desktop console assembly for the MFC
  • +
  • 4WD RC & Autonomous Vehicle closed-loop testing
  • +
  • YouTube Proof-of-Concept videos for all 4 projects
  • +
  • Custom PCB layout & Assembly language deep-dives
@@ -162,7 +145,7 @@ diff --git a/assets/css/style.css b/assets/css/style.css index 91161b5..ce46f7c 100644 --- a/assets/css/style.css +++ b/assets/css/style.css @@ -1,45 +1,99 @@ /* ========================================================================== Ertunç Özbay — Personal Workshop, Project Lab & Technical Notebook - Dark Metallic Engineering / Workshop Aesthetic + Vibrant Luminous Engineering Studio + Daylight Theme Support Plain CSS • Accessible • Responsive • Reduced-Motion Ready ========================================================================== */ :root { - /* Core Metallic & Workshop Surfaces */ - --bg-primary: #0d1117; - --bg-secondary: #131922; - --bg-card: #171f2b; - --bg-card-hover: #1c2635; - --bg-code: #0a0d12; + /* Luminous Indigo-Slate Canvas (Brighter, Richer, Colorful) */ + --bg-primary: #111827; + --bg-secondary: #182235; + --bg-card: #1e293b; + --bg-card-hover: #243248; + --bg-code: #0f172a; + --bg-header: rgba(17, 24, 39, 0.88); - /* Brushed Steel Borders & Hairlines */ - --border-subtle: #253041; - --border-strong: #37465d; - --border-accent: #e5a93c; + /* Crisp Borders & Hairlines */ + --border-subtle: #334155; + --border-strong: #475569; + --border-accent: #f59e0b; - /* High-Contrast Typography (WCAG AA/AAA compliant on dark surfaces) */ - --text-primary: #e6edf3; - --text-secondary: #b1bfd0; - --text-muted: #8494a7; + /* High-Contrast Typography */ + --text-primary: #f8fafc; + --text-secondary: #cbd5e1; + --text-muted: #94a3b8; - /* Workshop Indicator Accents */ - --accent-amber: #e5a93c; - --accent-amber-soft: rgba(229, 169, 60, 0.14); - --accent-teal: #4db6ac; - --accent-teal-soft: rgba(77, 182, 172, 0.14); - --accent-blue: #6ea8fe; - --status-progress: #e5a93c; - --status-experimental: #4db6ac; + /* Multi-Color Engineering Accents */ + --accent-amber: #f59e0b; + --accent-amber-soft: rgba(245, 158, 11, 0.16); + --accent-teal: #06b6d4; + --accent-teal-soft: rgba(6, 182, 212, 0.16); + --accent-emerald: #10b981; + --accent-emerald-soft: rgba(16, 185, 129, 0.16); + --accent-magenta: #ec4899; + --accent-magenta-soft: rgba(236, 72, 153, 0.16); + --accent-violet: #8b5cf6; + --accent-violet-soft: rgba(139, 92, 246, 0.16); + --accent-coral: #f43f5e; + --accent-coral-soft: rgba(244, 63, 94, 0.16); + --accent-blue: #38bdf8; + --accent-youtube: #ff0033; + + /* Gradients */ + --grad-hero: linear-gradient(135deg, rgba(30, 41, 59, 0.96) 0%, rgba(24, 34, 53, 0.96) 55%, rgba(36, 28, 62, 0.92) 100%); + --grad-brand: linear-gradient(135deg, #f59e0b 0%, #ec4899 55%, #06b6d4 100%); + --grad-amber: linear-gradient(90deg, #f59e0b, #f97316); + --grad-synth: linear-gradient(90deg, #ec4899, #8b5cf6, #06b6d4); + --grad-emerald: linear-gradient(90deg, #10b981, #06b6d4); + --grad-coral: linear-gradient(90deg, #f43f5e, #fb923c); /* Typography & Rhythm */ --font-sans: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; --font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, "Liberation Mono", monospace; - --max-width: 1040px; - --max-reading-width: 72ch; - --radius-sm: 6px; - --radius-md: 10px; - --shadow-panel: 0 8px 24px rgba(0, 0, 0, 0.35); + --max-width: 1100px; + --max-reading-width: 74ch; + --radius-sm: 8px; + --radius-md: 14px; + --radius-lg: 18px; + --shadow-panel: 0 12px 32px rgba(2, 6, 23, 0.42); + --shadow-card: 0 8px 24px rgba(2, 6, 23, 0.28); +} + +/* Optional Sunlit Studio Light Mode */ +[data-theme="light"] { + --bg-primary: #f8fafc; + --bg-secondary: #f1f5f9; + --bg-card: #ffffff; + --bg-card-hover: #f8fafc; + --bg-code: #0f172a; + --bg-header: rgba(255, 255, 255, 0.90); + + --border-subtle: #e2e8f0; + --border-strong: #cbd5e1; + --border-accent: #d97706; + + --text-primary: #0f172a; + --text-secondary: #334155; + --text-muted: #64748b; + + --accent-amber: #d97706; + --accent-amber-soft: rgba(217, 119, 6, 0.12); + --accent-teal: #0891b2; + --accent-teal-soft: rgba(8, 145, 178, 0.12); + --accent-emerald: #059669; + --accent-emerald-soft: rgba(5, 150, 105, 0.12); + --accent-magenta: #db2777; + --accent-magenta-soft: rgba(219, 39, 119, 0.12); + --accent-violet: #7c3aed; + --accent-violet-soft: rgba(124, 58, 237, 0.12); + --accent-coral: #e11d48; + --accent-coral-soft: rgba(225, 29, 72, 0.12); + --accent-blue: #0284c7; + + --grad-hero: linear-gradient(135deg, #ffffff 0%, #f0f9ff 50%, #fdf4ff 100%); + --shadow-panel: 0 12px 32px rgba(15, 23, 42, 0.08); + --shadow-card: 0 6px 20px rgba(15, 23, 42, 0.06); } /* Base Reset */ @@ -59,12 +113,15 @@ html { body { margin: 0; font-family: var(--font-sans); - line-height: 1.65; + line-height: 1.68; background-color: var(--bg-primary); background-image: - radial-gradient(rgba(255, 255, 255, 0.03) 1px, transparent 1px), - linear-gradient(180deg, #0d1117 0%, #10161f 100%); - background-size: 28px 28px, 100% 100%; + radial-gradient(circle at 12% 10%, rgba(6, 182, 212, 0.14), transparent 34%), + radial-gradient(circle at 88% 14%, rgba(236, 72, 153, 0.13), transparent 34%), + radial-gradient(circle at 50% 85%, rgba(245, 158, 11, 0.10), transparent 40%), + radial-gradient(rgba(148, 163, 184, 0.08) 1px, transparent 1px); + background-size: 100% 100%, 100% 100%, 100% 100%, 28px 28px; + background-attachment: fixed; color: var(--text-primary); min-height: 100vh; display: flex; @@ -77,8 +134,8 @@ body { top: -100px; left: 1rem; z-index: 1000; - background-color: var(--accent-amber); - color: #0d1117; + background: var(--grad-amber); + color: #0f172a; padding: 0.65rem 1.1rem; font-weight: 700; border-radius: var(--radius-sm); @@ -100,32 +157,40 @@ select:focus-visible, textarea:focus-visible, summary:focus-visible, [tabindex]:focus-visible { - outline: 2px solid var(--accent-amber); + outline: 2px solid var(--accent-teal); outline-offset: 3px; - border-radius: 3px; + border-radius: 4px; } /* Typography Hierarchy */ h1, h2, h3, h4 { color: var(--text-primary); - line-height: 1.25; + line-height: 1.24; margin-top: 0; - font-weight: 700; - letter-spacing: -0.015em; + font-weight: 800; + letter-spacing: -0.02em; } h1 { - font-size: clamp(1.85rem, 3.5vw, 2.55rem); + font-size: clamp(1.95rem, 3.6vw, 2.75rem); margin-bottom: 1rem; } +.gradient-title { + background: linear-gradient(90deg, var(--text-primary) 0%, #38bdf8 48%, #f59e0b 100%); + -webkit-background-clip: text; + background-clip: text; + color: transparent; + display: inline-block; +} + h2 { - font-size: clamp(1.35rem, 2.4vw, 1.75rem); + font-size: clamp(1.38rem, 2.5vw, 1.85rem); margin-bottom: 0.85rem; } h3 { - font-size: 1.18rem; + font-size: 1.22rem; margin-bottom: 0.55rem; } @@ -143,12 +208,12 @@ ul, ol { } li { - margin-bottom: 0.4rem; + margin-bottom: 0.45rem; } strong { color: var(--text-primary); - font-weight: 600; + font-weight: 650; } code, pre { @@ -157,21 +222,26 @@ code, pre { } code { - background-color: var(--bg-code); - color: var(--accent-amber); - padding: 0.15rem 0.4rem; - border-radius: 4px; + background-color: rgba(15, 23, 42, 0.75); + color: #38bdf8; + padding: 0.16rem 0.45rem; + border-radius: 5px; border: 1px solid var(--border-subtle); } +[data-theme="light"] code { + background-color: #f1f5f9; + color: #0369a1; +} + pre { background-color: var(--bg-code); - color: var(--text-primary); - padding: 1rem 1.2rem; + color: #f8fafc; + padding: 1.1rem 1.25rem; border-radius: var(--radius-sm); border: 1px solid var(--border-subtle); overflow-x: auto; - line-height: 1.5; + line-height: 1.55; } pre code { @@ -182,14 +252,14 @@ pre code { } a { - color: var(--accent-amber); + color: var(--accent-teal); text-decoration: underline; text-underline-offset: 0.22em; transition: color 0.15s ease; } a:hover { - color: #f3c66f; + color: var(--accent-amber); } img { @@ -203,7 +273,7 @@ img { width: 100%; max-width: var(--max-width); margin: 0 auto; - padding: 0 1.25rem; + padding: 0 1.35rem; } .reading-width { @@ -212,81 +282,99 @@ img { main { flex: 1; - padding: 2.5rem 0 4rem; + padding: 2.5rem 0 4.5rem; } /* Header & Navigation */ .site-header { - background-color: rgba(19, 25, 34, 0.94); + background-color: var(--bg-header); border-bottom: 1px solid var(--border-subtle); position: sticky; top: 0; z-index: 100; - backdrop-filter: blur(8px); + backdrop-filter: blur(14px); +} + +.site-header::before { + content: ""; + display: block; + height: 3px; + width: 100%; + background: linear-gradient(90deg, #06b6d4 0%, #8b5cf6 35%, #ec4899 68%, #f59e0b 100%); } .header-inner { display: flex; align-items: center; justify-content: space-between; - min-height: 4.25rem; + min-height: 4.4rem; gap: 1rem; } .site-brand { display: inline-flex; align-items: center; - gap: 0.65rem; + gap: 0.75rem; text-decoration: none; color: var(--text-primary); - font-weight: 700; - font-size: 1.05rem; + font-weight: 800; + font-size: 1.08rem; } .site-brand:hover { - color: var(--accent-amber); + color: var(--accent-teal); } .brand-mark { display: inline-flex; align-items: center; justify-content: center; - width: 2rem; - height: 2rem; - background-color: var(--bg-card); - border: 1px solid var(--border-strong); + width: 2.25rem; + height: 2.25rem; + background: var(--grad-brand); border-radius: var(--radius-sm); font-family: var(--font-mono); - font-size: 0.85rem; - color: var(--accent-amber); + font-size: 0.88rem; + font-weight: 800; + color: #ffffff; + box-shadow: 0 4px 12px rgba(236, 72, 153, 0.3); } .brand-subtitle { display: block; font-family: var(--font-mono); font-size: 0.72rem; - font-weight: 400; - color: var(--text-muted); + font-weight: 500; + color: var(--accent-teal); } -/* Mobile Navigation Button */ -.nav-toggle { - display: none; +/* Mobile Navigation Button & Theme Button */ +.nav-toggle, +.theme-toggle { + display: inline-flex; align-items: center; - gap: 0.45rem; + gap: 0.4rem; background-color: var(--bg-card); color: var(--text-primary); border: 1px solid var(--border-strong); border-radius: var(--radius-sm); - padding: 0.5rem 0.8rem; + padding: 0.45rem 0.75rem; font-family: var(--font-mono); - font-size: 0.85rem; + font-size: 0.8rem; + font-weight: 600; cursor: pointer; + transition: all 0.15s ease; } -.nav-toggle:hover { - border-color: var(--accent-amber); - color: var(--accent-amber); +.nav-toggle { + display: none; +} + +.nav-toggle:hover, +.theme-toggle:hover { + border-color: var(--accent-teal); + color: var(--accent-teal); + transform: translateY(-1px); } .nav-list { @@ -304,14 +392,14 @@ main { .nav-link { display: inline-block; - padding: 0.45rem 0.8rem; + padding: 0.45rem 0.85rem; color: var(--text-secondary); text-decoration: none; font-size: 0.95rem; - font-weight: 500; + font-weight: 600; border-radius: var(--radius-sm); border: 1px solid transparent; - transition: background-color 0.15s ease, color 0.15s ease, border-color 0.15s ease; + transition: all 0.15s ease; } .nav-link:hover { @@ -321,21 +409,37 @@ main { } .nav-link[aria-current="page"] { - color: var(--accent-amber); - background-color: var(--accent-amber-soft); - border-color: rgba(229, 169, 60, 0.4); - font-weight: 600; + color: #ffffff; + background: linear-gradient(135deg, rgba(6, 182, 212, 0.28), rgba(139, 92, 246, 0.28)); + border-color: rgba(6, 182, 212, 0.55); +} + +[data-theme="light"] .nav-link[aria-current="page"] { + color: #0f172a; } /* Workshop Hero / Intro Panel */ .workshop-hero { - background: linear-gradient(180deg, var(--bg-secondary) 0%, var(--bg-card) 100%); + position: relative; + background: var(--grad-hero); border: 1px solid var(--border-strong); - border-left: 4px solid var(--accent-amber); - border-radius: var(--radius-md); - padding: clamp(1.5rem, 3.5vw, 2.5rem); - margin-bottom: 2.5rem; + border-left: 5px solid var(--accent-teal); + border-radius: var(--radius-lg); + padding: clamp(1.65rem, 3.8vw, 2.75rem); + margin-bottom: 2.75rem; box-shadow: var(--shadow-panel); + overflow: hidden; +} + +.workshop-hero::after { + content: ""; + position: absolute; + top: -60px; + right: -60px; + width: 240px; + height: 240px; + background: radial-gradient(circle, rgba(6, 182, 212, 0.18) 0%, rgba(236, 72, 153, 0.10) 50%, transparent 70%); + pointer-events: none; } .workshop-eyebrow { @@ -343,30 +447,72 @@ main { align-items: center; gap: 0.5rem; font-family: var(--font-mono); - font-size: 0.82rem; + font-size: 0.8rem; + font-weight: 700; color: var(--accent-teal); background-color: var(--accent-teal-soft); - border: 1px solid rgba(77, 182, 172, 0.35); - padding: 0.25rem 0.65rem; + border: 1px solid rgba(6, 182, 212, 0.45); + padding: 0.28rem 0.75rem; border-radius: 999px; margin-bottom: 1rem; } .hero-lead { - font-size: clamp(1.1rem, 2vw, 1.28rem); + font-size: clamp(1.12rem, 2.1vw, 1.32rem); color: var(--text-primary); - max-width: 65ch; + max-width: 66ch; margin-bottom: 1rem; + font-weight: 500; } .hero-supporting-line { font-family: var(--font-mono); - font-size: 0.9rem; + font-size: 0.92rem; color: var(--accent-amber); margin-top: 1.1rem; margin-bottom: 1.5rem; + font-weight: 600; } +/* Stats / Quick Highlights Bar */ +.stats-strip { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); + gap: 0.9rem; + margin-top: 1.65rem; + padding-top: 1.35rem; + border-top: 1px solid var(--border-subtle); +} + +.stat-pill { + background-color: rgba(15, 23, 42, 0.45); + border: 1px solid var(--border-subtle); + border-radius: var(--radius-sm); + padding: 0.75rem 1rem; +} + +[data-theme="light"] .stat-pill { + background-color: rgba(255, 255, 255, 0.8); +} + +.stat-value { + display: block; + font-family: var(--font-mono); + font-size: 1.15rem; + font-weight: 800; + color: var(--accent-teal); +} + +.stat-pill:nth-child(2) .stat-value { color: var(--accent-amber); } +.stat-pill:nth-child(3) .stat-value { color: var(--accent-magenta); } +.stat-pill:nth-child(4) .stat-value { color: var(--accent-emerald); } + +.stat-label { + font-size: 0.82rem; + color: var(--text-muted); +} + +/* Buttons */ .button-row { display: flex; flex-wrap: wrap; @@ -379,42 +525,69 @@ main { align-items: center; justify-content: center; gap: 0.45rem; - padding: 0.6rem 1.1rem; - font-size: 0.95rem; - font-weight: 600; + padding: 0.62rem 1.15rem; + font-size: 0.94rem; + font-weight: 700; border-radius: var(--radius-sm); text-decoration: none; cursor: pointer; border: 1px solid transparent; - transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease; + transition: all 0.18s ease; } .btn-primary { - background-color: var(--accent-amber); - color: #0d1117; - border-color: var(--accent-amber); + background: linear-gradient(135deg, #f59e0b 0%, #f97316 100%); + color: #0f172a; + box-shadow: 0 4px 14px rgba(245, 158, 11, 0.3); } .btn-primary:hover { - background-color: #f0b954; - color: #0d1117; + background: linear-gradient(135deg, #fbbf24 0%, #fb923c 100%); + color: #0f172a; + transform: translateY(-1px); + box-shadow: 0 6px 20px rgba(245, 158, 11, 0.45); +} + +.btn-cyan { + background: linear-gradient(135deg, #06b6d4 0%, #3b82f6 100%); + color: #ffffff; + box-shadow: 0 4px 14px rgba(6, 182, 212, 0.3); +} + +.btn-cyan:hover { + background: linear-gradient(135deg, #22d3ee 0%, #60a5fa 100%); + color: #ffffff; + transform: translateY(-1px); +} + +.btn-youtube { + background: linear-gradient(135deg, #ff0033 0%, #e11d48 100%); + color: #ffffff; + box-shadow: 0 4px 14px rgba(255, 0, 51, 0.28); +} + +.btn-youtube:hover { + background: linear-gradient(135deg, #ff1a47 0%, #f43f5e 100%); + color: #ffffff; + transform: translateY(-1px); } .btn-secondary { - background-color: var(--bg-primary); + background-color: var(--bg-secondary); color: var(--text-primary); border-color: var(--border-strong); } .btn-secondary:hover { background-color: var(--bg-card-hover); - border-color: var(--accent-amber); - color: var(--accent-amber); + border-color: var(--accent-teal); + color: var(--accent-teal); + transform: translateY(-1px); } /* Section Headers & Grid Layouts */ .section-block { - margin-bottom: 3rem; + margin-bottom: 3.25rem; } .section-header { @@ -424,13 +597,14 @@ main { justify-content: space-between; gap: 0.75rem; border-bottom: 1px solid var(--border-subtle); - padding-bottom: 0.6rem; - margin-bottom: 1.35rem; + padding-bottom: 0.65rem; + margin-bottom: 1.45rem; } .section-label { font-family: var(--font-mono); font-size: 0.78rem; + font-weight: 700; text-transform: uppercase; letter-spacing: 0.08em; color: var(--accent-teal); @@ -440,78 +614,109 @@ main { .card-grid { display: grid; - grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); - gap: 1.25rem; + grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); + gap: 1.35rem; } .card-grid-2 { display: grid; - grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); - gap: 1.25rem; + grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)); + gap: 1.35rem; } -/* Metallic Workshop Cards */ +/* Colorful Engineering Cards */ .card { + position: relative; background-color: var(--bg-card); border: 1px solid var(--border-subtle); + border-top: 3px solid var(--accent-teal); border-radius: var(--radius-md); - padding: 1.4rem; + padding: 1.5rem; display: flex; flex-direction: column; justify-content: space-between; - box-shadow: 0 4px 14px rgba(0, 0, 0, 0.22); - transition: border-color 0.15s ease, background-color 0.15s ease; + box-shadow: var(--shadow-card); + transition: transform 0.18s ease, border-color 0.18s ease, box-shadow 0.18s ease; } .card:hover { border-color: var(--border-strong); - background-color: var(--bg-card-hover); + transform: translateY(-3px); + box-shadow: var(--shadow-panel); } +.card.card-amber { border-top-color: var(--accent-amber); } +.card.card-synth { border-top-color: var(--accent-magenta); } +.card.card-emerald { border-top-color: var(--accent-emerald); } +.card.card-coral { border-top-color: var(--accent-coral); } +.card.card-violet { border-top-color: var(--accent-violet); } + .card-top { margin-bottom: 1rem; } +.card h3 a { + color: var(--text-primary); + text-decoration: none; +} + +.card h3 a:hover { + color: var(--accent-teal); + text-decoration: underline; +} + .card-meta { display: flex; flex-wrap: wrap; align-items: center; gap: 0.5rem; - margin-bottom: 0.75rem; + margin-bottom: 0.8rem; font-family: var(--font-mono); font-size: 0.78rem; color: var(--text-muted); } -/* Badges & Tags */ +/* Badges & Colorful Tech Tags */ .badge { display: inline-flex; align-items: center; gap: 0.35rem; font-family: var(--font-mono); - font-size: 0.75rem; - font-weight: 600; - padding: 0.2rem 0.55rem; - border-radius: 4px; + font-size: 0.74rem; + font-weight: 700; + padding: 0.22rem 0.6rem; + border-radius: 999px; border: 1px solid transparent; } .badge-progress { background-color: var(--accent-amber-soft); color: var(--accent-amber); - border-color: rgba(229, 169, 60, 0.4); + border-color: rgba(245, 158, 11, 0.45); } .badge-experimental { - background-color: var(--accent-teal-soft); - color: var(--accent-teal); - border-color: rgba(77, 182, 172, 0.4); + background-color: var(--accent-magenta-soft); + color: var(--accent-magenta); + border-color: rgba(236, 72, 153, 0.45); +} + +.badge-active { + background-color: var(--accent-emerald-soft); + color: var(--accent-emerald); + border-color: rgba(16, 185, 129, 0.45); +} + +.badge-coral { + background-color: var(--accent-coral-soft); + color: var(--accent-coral); + border-color: rgba(244, 63, 94, 0.45); } .badge-draft { - background-color: rgba(110, 168, 254, 0.14); - color: var(--accent-blue); - border-color: rgba(110, 168, 254, 0.4); + background-color: var(--accent-teal-soft); + color: var(--accent-teal); + border-color: rgba(6, 182, 212, 0.45); } .tag-list { @@ -530,20 +735,29 @@ main { .tag { display: inline-block; font-family: var(--font-mono); - font-size: 0.76rem; + font-size: 0.75rem; + font-weight: 600; color: var(--text-secondary); - background-color: var(--bg-primary); + background-color: var(--bg-secondary); border: 1px solid var(--border-subtle); - padding: 0.18rem 0.55rem; - border-radius: 4px; + padding: 0.2rem 0.6rem; + border-radius: 6px; } +.tag.tag-c { color: #38bdf8; border-color: rgba(56, 189, 248, 0.35); background: rgba(56, 189, 248, 0.1); } +.tag.tag-esp { color: #f59e0b; border-color: rgba(245, 158, 11, 0.35); background: rgba(245, 158, 11, 0.1); } +.tag.tag-rust { color: #fb7185; border-color: rgba(251, 113, 133, 0.35); background: rgba(251, 113, 133, 0.1); } +.tag.tag-python { color: #a78bfa; border-color: rgba(167, 139, 250, 0.35); background: rgba(167, 139, 250, 0.1); } +.tag.tag-hw { color: #34d399; border-color: rgba(52, 211, 153, 0.35); background: rgba(52, 211, 153, 0.1); } +.tag.tag-synth { color: #f472b6; border-color: rgba(244, 114, 182, 0.35); background: rgba(244, 114, 182, 0.1); } + /* Project Card Learning / Next Step Callouts */ .project-notes { background-color: var(--bg-secondary); border: 1px solid var(--border-subtle); + border-left: 3px solid var(--accent-violet); border-radius: var(--radius-sm); - padding: 0.85rem 1rem; + padding: 0.9rem 1.05rem; margin: 0.85rem 0 1.1rem; font-size: 0.92rem; } @@ -560,17 +774,111 @@ main { display: flex; flex-wrap: wrap; gap: 0.65rem; - padding-top: 0.85rem; + padding-top: 0.95rem; border-top: 1px solid var(--border-subtle); } +/* ========================================================================== + YouTube Proof-of-Concept (PoC) Video Placeholder Component + ========================================================================== */ +.poc-video-section { + margin: 2rem 0 2.75rem; +} + +.poc-video-card { + position: relative; + background: linear-gradient(135deg, rgba(15, 23, 42, 0.95) 0%, rgba(30, 27, 75, 0.92) 50%, rgba(49, 16, 47, 0.9) 100%); + border: 1px solid rgba(244, 63, 94, 0.45); + border-radius: var(--radius-lg); + padding: clamp(1.35rem, 3vw, 2.2rem); + box-shadow: 0 14px 36px rgba(244, 63, 94, 0.14); + overflow: hidden; +} + +.poc-video-screen { + position: relative; + aspect-ratio: 16 / 9; + width: 100%; + background: + radial-gradient(circle at 50% 50%, rgba(255, 0, 51, 0.18), transparent 60%), + repeating-linear-gradient(0deg, rgba(255, 255, 255, 0.02) 0px, rgba(255, 255, 255, 0.02) 1px, transparent 1px, transparent 24px), + linear-gradient(180deg, #090d16 0%, #111827 100%); + border: 1px solid rgba(255, 255, 255, 0.14); + border-radius: var(--radius-md); + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + padding: 1.5rem; + color: #f8fafc; +} + +.poc-play-badge { + width: 74px; + height: 52px; + background: linear-gradient(135deg, #ff0033 0%, #e11d48 100%); + border-radius: 14px; + display: inline-flex; + align-items: center; + justify-content: center; + box-shadow: 0 0 0 8px rgba(255, 0, 51, 0.18), 0 10px 28px rgba(255, 0, 51, 0.45); + margin-bottom: 1rem; + transition: transform 0.2s ease, box-shadow 0.2s ease; +} + +.poc-video-screen:hover .poc-play-badge { + transform: scale(1.07); + box-shadow: 0 0 0 12px rgba(255, 0, 51, 0.25), 0 14px 32px rgba(255, 0, 51, 0.6); +} + +.poc-play-triangle { + width: 0; + height: 0; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + border-left: 18px solid #ffffff; + margin-left: 4px; +} + +.poc-status-pill { + display: inline-flex; + align-items: center; + gap: 0.4rem; + font-family: var(--font-mono); + font-size: 0.76rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: #fda4af; + background: rgba(244, 63, 94, 0.2); + border: 1px solid rgba(244, 63, 94, 0.45); + padding: 0.25rem 0.7rem; + border-radius: 999px; + margin-bottom: 0.6rem; +} + +.poc-video-title { + font-size: clamp(1.15rem, 2.2vw, 1.45rem); + font-weight: 800; + color: #ffffff; + margin-bottom: 0.4rem; +} + +.poc-video-desc { + color: #cbd5e1; + max-width: 56ch; + font-size: 0.94rem; + margin-bottom: 0; +} + /* Callout / Philosophy Panels */ .callout-box { background-color: var(--bg-secondary); border: 1px solid var(--border-strong); border-left: 4px solid var(--accent-teal); border-radius: var(--radius-md); - padding: 1.35rem 1.5rem; + padding: 1.4rem 1.55rem; margin: 1.5rem 0; } @@ -578,9 +886,14 @@ main { border-left-color: var(--accent-amber); } +.callout-box.magenta { + border-left-color: var(--accent-magenta); +} + .callout-title { font-family: var(--font-mono); font-size: 0.85rem; + font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--accent-teal); @@ -592,23 +905,84 @@ main { color: var(--accent-amber); } -/* Figure & Schematic Frames */ +.callout-box.magenta .callout-title { + color: var(--accent-magenta); +} + +/* Figure & Schematic Frames + Zoomable Images */ .schematic-frame { background-color: var(--bg-secondary); border: 1px solid var(--border-subtle); border-radius: var(--radius-md); - padding: 1rem; - margin: 1.5rem 0; + padding: 1.1rem; + margin: 1.6rem 0; } .schematic-caption { font-family: var(--font-mono); - font-size: 0.8rem; + font-size: 0.82rem; color: var(--text-muted); - margin-top: 0.65rem; + margin-top: 0.75rem; text-align: center; } +.zoomable-img { + cursor: zoom-in; + transition: transform 0.2s ease; +} + +.zoomable-img:hover { + transform: scale(1.015); +} + +/* Lightbox Overlay */ +.lightbox-backdrop { + position: fixed; + inset: 0; + background: rgba(2, 6, 23, 0.92); + backdrop-filter: blur(8px); + z-index: 2000; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + padding: 1.5rem; +} + +.lightbox-backdrop[hidden] { + display: none; +} + +.lightbox-Backdrop-img { + max-width: 92vw; + max-height: 82vh; + border-radius: var(--radius-md); + border: 1px solid var(--border-strong); + box-shadow: 0 20px 50px rgba(0, 0, 0, 0.65); + background: #ffffff; +} + +.lightbox-caption { + margin-top: 0.85rem; + font-family: var(--font-mono); + font-size: 0.9rem; + color: #f8fafc; + text-align: center; +} + +.lightbox-close { + position: absolute; + top: 1.25rem; + right: 1.5rem; + background: var(--bg-card); + color: #ffffff; + border: 1px solid var(--border-strong); + border-radius: var(--radius-sm); + padding: 0.45rem 0.9rem; + font-family: var(--font-mono); + cursor: pointer; +} + /* Breadcrumb / Back Navigation */ .breadcrumb { margin-bottom: 1.25rem; @@ -617,7 +991,7 @@ main { } .breadcrumb a { - color: var(--text-secondary); + color: var(--accent-teal); text-decoration: none; } @@ -638,23 +1012,24 @@ main { background-color: var(--bg-secondary); color: var(--text-secondary); border: 1px solid var(--border-subtle); - padding: 0.4rem 0.85rem; + padding: 0.45rem 0.9rem; border-radius: var(--radius-sm); font-family: var(--font-mono); font-size: 0.82rem; + font-weight: 600; cursor: pointer; } .filter-btn:hover { - border-color: var(--border-strong); + border-color: var(--accent-teal); color: var(--text-primary); } .filter-btn[aria-pressed="true"] { - background-color: var(--accent-amber-soft); - color: var(--accent-amber); - border-color: var(--accent-amber); - font-weight: 600; + background-color: var(--accent-teal-soft); + color: var(--accent-teal); + border-color: var(--accent-teal); + font-weight: 700; } /* Spec / Component Table */ @@ -672,16 +1047,17 @@ main { .spec-table th, .spec-table td { text-align: left; - padding: 0.75rem 1rem; + padding: 0.8rem 1rem; border-bottom: 1px solid var(--border-subtle); } .spec-table th { background-color: var(--bg-card); - color: var(--text-primary); + color: var(--accent-teal); font-family: var(--font-mono); - font-size: 0.82rem; + font-size: 0.8rem; text-transform: uppercase; + letter-spacing: 0.05em; } .spec-table td { @@ -692,9 +1068,9 @@ main { .site-footer { background-color: var(--bg-secondary); border-top: 1px solid var(--border-subtle); - padding: 2rem 0; + padding: 2.25rem 0; margin-top: auto; - font-size: 0.9rem; + font-size: 0.92rem; } .footer-inner { @@ -708,7 +1084,7 @@ main { .footer-links { display: flex; flex-wrap: wrap; - gap: 1rem; + gap: 1.1rem; list-style: none; margin: 0; padding: 0; @@ -719,7 +1095,7 @@ main { } /* Responsive Mobile Navigation */ -@media (max-width: 760px) { +@media (max-width: 780px) { .nav-toggle { display: inline-flex; } diff --git a/assets/images/BOTTOM_VIEW.png b/assets/images/BOTTOM_VIEW.png new file mode 100644 index 0000000..b2b4cb4 Binary files /dev/null and b/assets/images/BOTTOM_VIEW.png differ diff --git a/assets/images/SIDE_VIEW_WITH_ANTENNA.png b/assets/images/SIDE_VIEW_WITH_ANTENNA.png new file mode 100644 index 0000000..3528ad9 Binary files /dev/null and b/assets/images/SIDE_VIEW_WITH_ANTENNA.png differ diff --git a/assets/images/TOP_VIEW.png b/assets/images/TOP_VIEW.png new file mode 100644 index 0000000..0d043fa Binary files /dev/null and b/assets/images/TOP_VIEW.png differ diff --git a/assets/images/mfc-1.svg b/assets/images/mfc-1.svg new file mode 100644 index 0000000..9bb360f --- /dev/null +++ b/assets/images/mfc-1.svg @@ -0,0 +1,19790 @@ + + + +SVG Image created as mfc-1.svg date 2026-10-18T01:21:08 + Image generated by Eeschema-SVG + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + +2 +2 + + + + + + + + + + +3 +3 + + + + + + + + + + + + + +4 +4 + + + +5 +5 + + + + + + + + + + + + + + + +6 +6 + + + + + + + + + + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + + + + +A +A + + + +B +B + + + + + + + + + + + + + + + + + + +C +C + + + + + + + + + + + + + + + +D +D + + + + + + + + + + + + +Date: +Date: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +KiCad E.D.A. 10.0.7 +KiCad E.D.A. 10.0.7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Rev: +Rev: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Size: A4 +Size: A4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Id: 1/1 +Id: 1/1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Title: +Title: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +File: mfc-1.kicad_sch +File: mfc-1.kicad_sch + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Sheet: / +Sheet: / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1 +1 + + + + + + + + + + +VCC +VCC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + + +CE + +CE + + + + + + + + + + + + + + + + + + + + + + +3 + +3 + + + + + + + + + + + + + + + + + + + +~{CSN} + +~{CSN} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4 + +4 + + + + + + + + + + +SCK + +SCK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 + +5 + + + + + + + + + + + + + + + + + + + + + +MOSI + +MOSI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6 + +6 + + + + + + + + + + + + + + + + + + + + + + + + + + + +MISO + +MISO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 + +7 + + + + + + + + +IRQ + +IRQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +8 + +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +U2 +U2 + + + + + + + + + + + + + + + + + + + +NRF24L01_Breakout +NRF24L01_Breakout + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +C1 +C1 + + + + + + + + + + + + + + + + + + + + +100 microfarad +100 microfarad + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SPICLK_N + +SPICLK_N + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +36 + +36 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MTDO + +MTDO + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +45 + +45 + + + + + + + + + + + + + + + + + + + + + + + + +GPIO45 + +GPIO45 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +51 + +51 + + + + + + + + + + + + + + + + + + + + + + + + + + +LNA_IN + +LNA_IN + + + + + + + + + + + + + + + + +1 + +1 + + + + + + + + + + +VDD3P3 +VDD3P3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +2 +2 + + + + + + + + + + + + + + + + +CHIP_PU + +CHIP_PU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +4 + +4 + + + + + + + + + +GPIO0 + +GPIO0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +5 + +5 + + + + + + + + + + + + + + + + + + + + + +GPIO1 + +GPIO1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +6 + +6 + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO2 + +GPIO2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +7 + +7 + + + + + + + + +GPIO3 + +GPIO3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +8 + +8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO4 + +GPIO4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +9 + +9 + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO5 + +GPIO5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +10 + +10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO6 + +GPIO6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +11 + +11 + + + + + + + + + + + + + + + + +GPIO7 + +GPIO7 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +12 + +12 + + + + + + + + + + + + + + + + + + + + + +GPIO8 + +GPIO8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +13 + +13 + + + + + + + + + + + + + + + + + + + + + + + + +GPIO9 + +GPIO9 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +14 + +14 + + + + + + + + + + + + + + +GPIO10 + +GPIO10 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +15 + +15 + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO11 + +GPIO11 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +16 + +16 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO12 + +GPIO12 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +17 + +17 + + + + + + + + + + + + + +GPIO13 + +GPIO13 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +18 + +18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO14 + +GPIO14 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +19 + +19 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD3P3_RTC +VDD3P3_RTC + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +20 +20 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +XTAL_32K_P + +XTAL_32K_P + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +21 + +21 + + + + + + + + + + + + + + + + + + + + + +XTAL_32K_N + +XTAL_32K_N + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +22 + +22 + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO17 + +GPIO17 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +23 + +23 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO18 + +GPIO18 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +24 + +24 + + + + + + + + + + + + + + + + + + + +GPIO19/USB_D- + +GPIO19/USB_D- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +25 + +25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO20/USB_D+ + +GPIO20/USB_D+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +26 + +26 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO21 + +GPIO21 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +27 + +27 + + + + + + + + + + + + + + + + + + +SPICS1 + +SPICS1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +28 + +28 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +VDD_SPI +VDD_SPI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +29 +29 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SPIHD + +SPIHD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +30 + +30 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SPIWP + +SPIWP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +31 + +31 + + + + + + + + + + + + + + + + + + + + + + + + +SPICS0 + +SPICS0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +32 + +32 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SPICLK + +SPICLK + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +33 + +33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SPIQ + +SPIQ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +34 + +34 + + + + + + + + + + + + + + + + + + + + + + +SPID + +SPID + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +35 + +35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +SPICLK_P + +SPICLK_P + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +37 + +37 + + + + + + + + + + + + + + + + + + + + + +GPIO33 + +GPIO33 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +38 + +38 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO34 + +GPIO34 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +39 + +39 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO35 + +GPIO35 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +40 + +40 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO36 + +GPIO36 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +41 + +41 + + + + + + + + + + + + + + +GPIO37 + +GPIO37 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +42 + +42 + + + + + + + + + + + + + + + + + + + +GPIO38 + +GPIO38 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +43 + +43 + + + + + + + + + + + + + + + + + + + + + + +MTCK + +MTCK + + + + + + + + + + + + + + + + + + + + + + + + + + + +44 + +44 + + + + + + + + + + + +VDD3P3_CPU +VDD3P3_CPU + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +46 +46 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +MTDI + +MTDI + + + + + + + + + + + + + + + + + + + + + + +47 + +47 + + + + + + + + + + + +MTMS + +MTMS + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +48 + +48 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +U0TXD + +U0TXD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +49 + +49 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +U0RXD + +U0RXD + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +50 + +50 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GPIO46 + +GPIO46 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +52 + +52 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +XTAL_N + +XTAL_N + + + + + + + + + + + + + + + + +53 + +53 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +XTAL_P + +XTAL_P + + + + + + + + + + + + + + + + + + + + + + + +54 + +54 + + + + + + + + + + + + + + + + + + + + + + + +VDDA +VDDA + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +55 +55 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +GND +GND + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +57 +57 + + + + + + + + + + + + + + + + + + + +U1 +U1 + + + + + + + + + + + + + + +ESP32-S3 +ESP32-S3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/js/main.js b/assets/js/main.js index 6ed28b4..ccf7027 100644 --- a/assets/js/main.js +++ b/assets/js/main.js @@ -2,13 +2,56 @@ Ertunç Özbay — Workshop & Portfolio Script (Plain JS, No Dependencies) Handles: 1. Accessible mobile navigation menu toggle (with Escape key support) - 2. Static blog category filtering on the Blog page + 2. Luminous Aurora / Daylight Studio theme switcher (persisted in localStorage) + 3. Static blog category filtering on the Blog page + 4. One-click copy email button on Contact page + 5. Image lightbox for hardware prototype photos and schematics ========================================================================== */ (function () { "use strict"; - // 1. Mobile Navigation Toggle + // 1. Theme Switcher (Vibrant Aurora Default + Daylight Studio Mode) + var rootEl = document.documentElement; + var savedTheme = null; + try { + savedTheme = localStorage.getItem("eo-theme"); + } catch (e) {} + + if (savedTheme === "light" || savedTheme === "dark") { + rootEl.setAttribute("data-theme", savedTheme); + } + + var navList = document.querySelector(".nav-list"); + if (navList && !document.querySelector("[data-theme-toggle]")) { + var li = document.createElement("li"); + var btn = document.createElement("button"); + btn.type = "button"; + btn.className = "theme-toggle"; + btn.setAttribute("data-theme-toggle", ""); + btn.setAttribute("aria-label", "Toggle color theme"); + + function updateThemeBtnLabel() { + var isLight = rootEl.getAttribute("data-theme") === "light"; + btn.textContent = isLight ? "🌙 Aurora" : "☀️ Daylight"; + } + updateThemeBtnLabel(); + + btn.addEventListener("click", function () { + var isLight = rootEl.getAttribute("data-theme") === "light"; + var nextTheme = isLight ? "dark" : "light"; + rootEl.setAttribute("data-theme", nextTheme); + try { + localStorage.setItem("eo-theme", nextTheme); + } catch (e) {} + updateThemeBtnLabel(); + }); + + li.appendChild(btn); + navList.appendChild(li); + } + + // 2. Mobile Navigation Toggle var navToggle = document.querySelector("[data-nav-toggle]"); var siteNav = document.querySelector("[data-site-nav]"); @@ -24,7 +67,6 @@ } }); - // Close mobile menu when pressing Escape document.addEventListener("keydown", function (event) { if (event.key === "Escape" && siteNav.classList.contains("is-open")) { navToggle.setAttribute("aria-expanded", "false"); @@ -38,7 +80,7 @@ }); } - // 2. Blog Category Filter (Progressive Enhancement) + // 3. Blog Category Filter var filterButtons = document.querySelectorAll("[data-blog-filter]"); var blogCards = document.querySelectorAll("[data-blog-category]"); var filterStatus = document.getElementById("blog-filter-status"); @@ -70,4 +112,59 @@ }); }); } + + // 4. Copy Email to Clipboard Buttons + var copyButtons = document.querySelectorAll("[data-copy-email]"); + copyButtons.forEach(function (btn) { + btn.addEventListener("click", function () { + var email = btn.getAttribute("data-copy-email"); + if (!email || !navigator.clipboard) return; + var originalText = btn.textContent; + navigator.clipboard.writeText(email).then(function () { + btn.textContent = "✓ Copied: " + email; + setTimeout(function () { + btn.textContent = originalText; + }, 2200); + }); + }); + }); + + // 5. Image Lightbox for Hardware Photos & Schematics + var zoomImages = document.querySelectorAll(".zoomable-img"); + if (zoomImages.length > 0) { + var backdrop = document.createElement("div"); + backdrop.className = "lightbox-backdrop"; + backdrop.hidden = true; + backdrop.innerHTML = + '' + + '' + + ''; + document.body.appendChild(backdrop); + + var lbImg = backdrop.querySelector(".lightbox-Backdrop-img"); + var lbCap = backdrop.querySelector(".lightbox-caption"); + var lbClose = backdrop.querySelector(".lightbox-close"); + + function closeLightbox() { + backdrop.hidden = true; + lbImg.src = ""; + } + + zoomImages.forEach(function (img) { + img.addEventListener("click", function () { + lbImg.src = img.src; + lbImg.alt = img.alt || ""; + lbCap.textContent = img.alt || ""; + backdrop.hidden = false; + }); + }); + + lbClose.addEventListener("click", closeLightbox); + backdrop.addEventListener("click", function (e) { + if (e.target === backdrop) closeLightbox(); + }); + document.addEventListener("keydown", function (e) { + if (e.key === "Escape" && !backdrop.hidden) closeLightbox(); + }); + } })(); diff --git a/blog/index.html b/blog/index.html index 1dd24e6..52b3fcd 100644 --- a/blog/index.html +++ b/blog/index.html @@ -3,8 +3,8 @@ - Blog & Build Notes — Ertunç Özbay - + Blog & Build Notes — Ertunç Özbay + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -42,13 +42,10 @@
- TECHNICAL NOTEBOOK // STATIC BLOG -

Blog & Build Notes

+ 📓 TECHNICAL NOTEBOOK // STATIC BLOG +

Blog & Build Notes

- This is where I document project build logs, embedded systems learning, circuit experiments, C programming notes, reverse-engineering learning, and honest reflections on what worked and what failed. -

-

- Honest status note: This blog is a manually maintained static notebook. While I prepare my first full technical build logs, the entries below are clearly labeled as an Example / Starter Note and a reusable Template / Draft so nothing here pretends to be a finished achievement before it is written. + Where I document hardware build logs, ESP-IDF firmware architecture, circuit debugging stories, and honest reflections on what worked and what failed.

@@ -71,25 +68,22 @@
- -
+ +
- Example • Work in progress + Starter Note • 3 min read
-

Why I Built This Personal Workshop & Learning Notebook (Starter Note)

+

Why I Built This Personal Workshop & Learning Notebook

- Category: Personal Learning Reflections & Open-Source Ideas -

-

- An introductory note explaining why I redesigned my site as a calm, honest workshop for hardware, software, C programming, and project build logs rather than a corporate résumé. + An introductory note explaining why I designed my site as an open engineering studio for hardware, embedded C firmware, and project build logs rather than a corporate résumé.

    -
  • workshop
  • -
  • hardware-software
  • -
  • learning-in-public
  • +
  • workshop
  • +
  • hardware-software
  • +
  • learning-in-public
@@ -97,8 +91,8 @@
- -
+ +
Template • Draft @@ -107,15 +101,11 @@

[Template] Project Build Log & Technical Note Template

- Category: Template / Build Log Structure -

-

- A ready-to-copy static HTML article template containing placeholders for title, date, category, tags, reading time, what worked, what failed, and related project links. + A reusable static HTML article template containing sections for hardware schematics, firmware architecture, what worked, what failed, and related project links.

    -
  • template
  • -
  • draft
  • -
  • build-log
  • +
  • template
  • +
  • build-log
@@ -125,25 +115,13 @@
-
- -

What I Plan to Write About Next

-
    -
  • MIDI project development: How my conversion script turns MIDI data into C code for two active buzzers, one passive buzzer, and a 1.3-inch AMOLED display.
  • -
  • RC controller & autonomous vehicle notes: Build logs and hardware-software integration lessons as components are tested.
  • -
  • Embedded systems & circuit experiments: Notes from studying circuit analysis, C programming, and future Assembly experiments.
  • -
  • Reverse-engineering learning notes: Beginner investigations using Cheat Engine, Ghidra, and x64dbg to understand how software works internally.
  • -
  • What worked and what failed: Honest debugging stories and lessons learned when guiding and verifying AI-generated code.
  • -
-
-
diff --git a/contact.html b/contact.html index 67f8708..8145413 100644 --- a/contact.html +++ b/contact.html @@ -3,8 +3,8 @@ - Contact & Collaboration — Ertunç Özbay - + Contact & Collaboration — Ertunç Özbay + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -42,68 +42,144 @@
- CONNECT // SAY HELLO -

Contact & Collaboration

+ ✉️ DIRECT CONTACT // OPEN COLLABORATION +

Contact & Collaboration

- I want visitors here to feel like they are meeting a friend or an engineering teammate. If you enjoy building things, learning deeply, or talking about how hardware and software work together, I would be happy to connect. + Whether you want to talk about ESP32 embedded firmware, circuit design, Linux systems programming, or open-source hardware collaboration, feel free to reach out directly via Gmail, LinkedIn, or GitHub.

+
- - + +
-
+ +
- -

github.com/ertunc-ozbay

+
+ Primary Inbox • Gmail + Fastest Response +
+

ertuncozbayh@gmail.com

- Follow my open-source repositories, check out my ongoing code and hardware-software projects, or open an issue/discussion on a repository. + My primary personal and engineering Gmail inbox. Ideal for project discussions, schematic/code questions, internship or collaboration inquiries, and fellow student builders. +

+

+ Secondary / Git Email (Outlook): ertunc.ozbay@outlook.com

-
+ +
- -

Project Repositories

+
+ Code & Professional Network + Open Source +
+

github.com/ertunc-ozbay

- Explore the source code for this static workshop website or my ongoing Multi-Functional RC Controller project: + Browse my ESP-IDF C99 firmware, KiCad hardware schematics, Python MIDI RLE compilers, and Rust Linux desktop tools, or connect with me on LinkedIn.

-
+ +
+
+
+ +
+
+
+ +

Active Repositories on GitHub

+
+
+ +
+
+
+ +

ertunc-ozbay/multi-functional-controller

+

+ ESP32-S3-N16R8 Multi-Functional Controller (MFC) featuring 2.4 GHz nRF24L01+ RF telemetry, K-Silver Hall-effect gimbals, hardware PCNT rotary decoder, and shared SPI2 display UI. +

+
+ +
+ +
+
+ +

ertunc-ozbay/midi-breadboard-instrument

+

+ Dual-core ESP32 16-track MIDI breadboard synthesizer, drum sequencer, 30 FPS SPI OLED visualizer, and Python RLE MIDI-to-C compiler (ESP-IDF v5.2.2). +

+
+ +
+ +
+
+ +

ertunc-ozbay/pointblank-linux

+

+ Standalone Linux desktop launcher written in Rust to run Point Blank with 100% unmodified official CheatBlocker anti-cheat, automated Wine prefix setup, and DirectX 9/11. +

+
+ +
+ +
+
+ +

ertunc-ozbay/ertuncozbay.github.io

+

+ Source repository for this static workshop website and engineering notebook hosted at ertuncozbay.dev. +

+
+
- +

Topics I Always Enjoy Discussing

    -
  • Embedded systems, microcontrollers, circuit analysis, and breadboard builds
  • -
  • C programming, learning Assembly, and exploring C++, Python, or Rust
  • -
  • RC controllers, autonomous vehicle experiments, and hardware-software interaction
  • -
  • Beginner reverse-engineering learning notes (Cheat Engine, Ghidra, x64dbg)
  • -
  • Open-source projects, learning in public, and using AI responsibly by understanding the underlying system
  • +
  • Embedded Systems & Electronics: ESP32 / ESP32-S3, ESP-IDF, FreeRTOS, SPI/I2C/PWM/PCNT peripherals, schematic capture, and breadboard-to-perfboard builds.
  • +
  • Systems Programming: ISO C99, C++, Rust, Python hardware tooling, and low-level memory/assembly analysis.
  • +
  • RF Telemetry & Robotics: 2.4 GHz nRF24L01+ wireless control links, Hall-effect gimbals, and 4WD autonomous vehicle control loops.
  • +
  • Reverse Engineering & Linux Internals: Studying binary behavior with Ghidra, x64dbg, Cheat Engine, and Wine/Proton runtime compatibility on Arch Linux.
- -
- Future Community Note -

- In the future, after this static portfolio and blog have grown with more project logs and articles, I hope to add a small community discussion space where people can talk about projects and experiments directly. For now, the site stays 100% static and simple, and GitHub is the best place to reach me. -

-
@@ -112,7 +188,7 @@ diff --git a/index.html b/index.html index fc9bf23..1ecf054 100644 --- a/index.html +++ b/index.html @@ -3,8 +3,8 @@ - Ertunç Özbay — Personal Workshop, Projects & Technical Notebook - + Ertunç Özbay — Embedded Systems, Hardware Lab & Open-Source Projects + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -42,81 +42,140 @@
- WORKSHOP BENCH // OPEN NOTEBOOK -

Hi, I’m Ertunç.

+ ⚡ ELECTRICAL & ELECTRONICS ENGINEERING // OPEN WORKBENCH +

Hi, I’m Ertunç Özbay.

- I build things, take systems apart, and learn how hardware and software work together. + I design embedded hardware, write bare-metal C & FreeRTOS firmware, and build open-source systems from the transistor level up to Linux desktop tooling.

- This is my personal workshop for embedded systems, electronics, software, reverse engineering, open-source projects, and the lessons I collect while building. I enjoy making useful, strange, and sometimes purely fun things while documenting what works, what fails, and how each system develops. -

-

- Hardware + software learner • Open-source enthusiast • Student builder + Welcome to my engineering studio and notebook. Here I document my real hardware prototypes—from an ESP32-S3 2.4 GHz Multi-Functional RC Console and a Dual-Core ESP32 16-Track MIDI Synthesizer to a 4WD Autonomous Vehicle and a Standalone Linux Game Launcher written in Rust.

+ +
+
+ 4 Active Builds + ESP32-S3, ESP32, 4WD RC & Linux/Rust +
+
+ ESP-IDF v5.2.2 + ISO C99, Dual-Core FreeRTOS & KiCad +
+
+ 16-Track Synth + Custom Python RLE MIDI-to-C Compiler +
+
+ Open Source + Schematics, Firmware & Build Logs +
- -

Current Projects

+ +

Projects on My Bench

- View all project details → + View full specifications & PoC video slots →
-
-
+
+ +
- In progress - Hardware + Software + Hardware Rev 0.1 → Phase 2 Console + ESP32-S3 • 2.4 GHz RF
-

Multi-Functional RC Controller

+

Multi-Functional RC Controller (MFC)

- An ongoing project focused on RC control and hardware-software integration, built to understand how physical inputs and control logic work together. + A handheld 2.4 GHz wireless transmitter and embedded control console powered by an ESP32-S3-N16R8 (16 MB Flash / 8 MB Octal PSRAM), nRF24L01+ PA+LNA RF transceiver, dual K-Silver Hall-effect gimbals, and shared SPI2 1.3" ST7789 IPS TFT + MicroSD bus.

+
    +
  • ESP32-S3-N16R8
  • +
  • ESP-IDF C99
  • +
  • nRF24L01+ 2.4GHz
  • +
  • KiCad Schematic
  • +
-
+ +
- In progress - Control & Electronics + Active Prototype + Dual-Core ESP32 • Audio & UI
-

RC and Autonomous Vehicle

+

MIDI Breadboard Instrument (Desk Rave 16-Track Symphony)

- An ongoing project exploring RC control and autonomous vehicle behavior across electronics, control logic, and software. + A standalone dual-core ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer with a custom Python RLE MIDI-to-C compiler (midi_to_c.py), hardware PCNT rotary encoder, passive melody piezo, and dual active drum buzzers.

+
    +
  • ESP32 Dual-Core
  • +
  • Python RLE Compiler
  • +
  • 30 FPS SPI OLED
  • +
  • FreeRTOS IPC
  • +
-
+ +
- In progress • Experimental - Breadboard + C Code + In Development + Robotics • Control Logic
-

MIDI Breadboard Instrument

+

RC and Autonomous 4WD Vehicle

- A breadboard-based project that plays MIDI melodies by converting MIDI data into C code for the device, driving buzzers, an AMOLED display, and physical controls. + A companion 4WD robotic vehicle platform designed to pair with the 2.4 GHz Multi-Functional Controller while exploring closed-loop motor control, telemetry feedback, and autonomous obstacle-avoidance logic.

+
    +
  • 4WD Robotics
  • +
  • Embedded Control
  • +
  • 2.4 GHz Telemetry
  • +
+
+ + +
+
+
+ v1.0.0 Released + Rust • Linux Systems & Wine +
+

Point Blank on Linux — Standalone Community Launcher

+

+ An all-in-one standalone Linux desktop launcher written in Rust that runs Point Blank (Zepetto / TAM) on Linux with 100% unmodified official CheatBlocker anti-cheat, automated Wine prefix provisioning, and DirectX 9 / DirectX 11 support. +

+
    +
  • Rust
  • +
  • Wine / DirectX 11
  • +
  • Linux Desktop
  • +
+
+
@@ -125,43 +184,43 @@
- -

What I Document Here

+ +

How I Approach Engineering

-
+
-

Understanding the Whole System

+

Understanding the Whole Stack

- I do not want to understand only one isolated layer of a system. I study how physical components, circuits, C code, and software tools connect so I can make informed decisions and take responsibility for what I build. + From decoupling capacitors, BJT switches, and SPI bus arbitration up to FreeRTOS tasks and Python/Rust tooling—I study how every layer connects so I can take full ownership of what I build.

- Read my systems philosophy → + Read my engineering philosophy →
-
+
- -

The Workshop Notebook

+ +

The Open Workbench

- Not every experiment begins as a polished project. The Lab page holds my current circuit tests, MIDI-to-C conversion scripts, reverse-engineering learning notes, and open technical questions. + Explore my active breadboard tests, RLE MIDI-to-C compression algorithms, hardware protection fixes, and reverse-engineering study notes.

- Open the Lab page → + Open the Lab Notebook →
-
+
- -

Learning in Public

+ +

Collaborate & Connect

- A manually maintained notebook for build logs, C programming notes, embedded experiments, and honest reflections on what worked and what failed along the way. + Reach out directly via Gmail (ertuncozbayh@gmail.com), Outlook, LinkedIn, or GitHub to discuss embedded systems, electronics, or open-source builds.

- Browse the Blog → + View Contact & Email Details →
@@ -172,7 +231,7 @@ diff --git a/lab.html b/lab.html index 50589ef..afc17ee 100644 --- a/lab.html +++ b/lab.html @@ -3,8 +3,8 @@ - Lab & Experiment Notebook — Ertunç Özbay - + Lab & Experiment Notebook — Ertunç Özbay + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -42,10 +42,10 @@
- WORKSHOP BENCH // LAB NOTEBOOK -

Lab & Experiment Notebook

+ 🔬 WORKSHOP BENCH // LAB NOTEBOOK +

Lab & Experiment Notebook

- Welcome to my open workbench. Not everything I do starts as a structured project—this page tracks my ongoing hardware experiments, conversion scripts, reverse-engineering learning notes, playful breadboard builds, and the technical questions I am currently investigating. + Welcome to my open workbench. This page tracks my real engineering experiments, hardware debugging breakthroughs, Python/Rust tooling scripts, and reverse-engineering study notes.

@@ -53,167 +53,102 @@
- -

Current Experiments

+ +

Recent Hardware & Firmware Experiments

-
+
- On the Breadboard - Hardware + C + Solved on Breadboard + ESP32 Dual-Core • Python RLE
-

Multi-Buzzer MIDI Playback & Display Sync

+

Defeating the 30 Hz MIDI "Strobe-Light" Bug & Piezo Bass Roll-Off

- Testing how two active buzzers and one passive buzzer behave together on a breadboard alongside a 1.3-inch AMOLED screen, a rotary encoder, two buttons, and two LEDs as part of my MIDI Breadboard Instrument. + While building the 16-Track MIDI Breadboard Instrument, raw MIDI delta-slices caused the LEDs and 1.3" SPI OLED to strobe violently. Writing a custom Run-Length Encoding (RLE) compressor in Python (midi_to_c.py) and transposing bass-heavy tracks like Seven Nation Army +2 octaves solved both flash exhaustion and piezo acoustic roll-off.

-
+
- Ongoing Study - Control & Integration + Hardware Rev 0.1 → Phase 2 + ESP32-S3-N16R8 • SPI2 Bus
-

RC Input & Vehicle Control Logic

+

ESP32-S3 Octal PSRAM Pin Collisions & Shared SPI2 Arbitration

- Exploring how physical inputs on my Multi-Functional RC Controller and control logic for my RC and Autonomous Vehicle can be organized cleanly across hardware and software. + On the Multi-Functional RC Controller, the ESP32-S3-N16R8 reserves GPIO 35–37 for internal Octal PSRAM/Flash. We remapped the shared SPI2 bus (MOSI: 11, MISO: 13, SCK: 12) with dedicated hardware CS lines for the nRF24L01+ (CSN: 10), MicroSD (CS: 39), and ST7789 IPS TFT (CS: 40).

- -
-
-
- -

Hardware Experiments

-
-
-
-
-
-

Circuit Analysis & Breadboard Prototyping

-

- Connecting classroom circuit analysis concepts to real breadboard setups—watching how physical components, buttons, encoders, buzzers, and indicator LEDs behave in practice. -

-
-
- -
-
-

Physical Computing Interfaces

-

- Experimenting with tactile hardware inputs (rotary encoders and push buttons) and compact displays (such as a 1.3-inch AMOLED screen) to make embedded builds interactive without relying on a PC screen. -

-
-
-
-
- - +
- -

Software and Conversion Tools

-
-
-
-
-
-

MIDI-to-C Code Conversion Script

-

- A custom script I wrote that takes MIDI data and converts it into C code for my breadboard instrument. It bridges higher-level musical data with low-level C arrays that the hardware can play directly. -

-
-
- -
-
-

C Programming & Future Language Exploration

-

- Practicing C programming for embedded systems now, while preparing to study Assembly for deeper low-level understanding and expanding my toolkit with C++, Python, and Rust. -

-
-
-
-
- - -
-
-
- -

Reverse-Engineering Learning

-
-
-
- Beginner Learning Log -

- I am learning reverse engineering and experimenting with reverse-engineering tools because I am interested in understanding how software and systems work internally. -

-
    -
  • Tools I have experimented with: Cheat Engine, Ghidra, and x64dbg.
  • -
  • What I tried: Investigating and configuring aspects of online game mechanics.
  • -
  • Honest reflection: In some of these experiments, I used code generated with the help of AI tools and realized I did not yet understand every line of the underlying code. That realization motivated me to study C, memory concepts, and future Assembly systematically so I can read and verify what happens under the hood myself.
  • -
-
-
- - -
-
-
- -

Unfinished or Playful Builds

-
-
-

- I believe some of the best learning happens when building things that are unusual, playful, or simply fun. Playing MIDI melodies across two active buzzers and one passive buzzer on a breadboard started from that exact spirit—combining music, C code, and electronics just to see how far a breadboard setup can go. -

-
- - -
-
-
- -

Questions I Am Currently Investigating

+ +

Custom Compilers & Linux Runtime Tools

-
+
-

How do C constructs map to Assembly and hardware?

+
+ Rust • Linux x86_64 + Wine & DirectX 11 +
+

16-Byte TLS Alignment for DirectX 11 on Linux

- As I study C programming and prepare to learn Assembly, how do compiled functions, memory layouts, and hardware registers look when inspected inside tools like Ghidra or x64dbg? + In pointblank-linux, we engineered a standalone Rust launcher that automatically provisions a 16-byte TLS-aligned ntdll.dll runtime and vcrun2022 / d3dx11_43 components so Point Blank runs at 200 FPS in DirectX 11 on Linux with unmodified official CheatBlocker anti-cheat.

-
+
-

How can we use AI tools without losing deep system understanding?

+
+ Python 3 • mido + Embedded Audio Tooling +
+

RLE MIDI-to-C Struct Compiler (midi_to_c.py)

- What foundational knowledge across electronics, firmware, and software is essential so a builder can guide AI effectively, spot subtle bugs, and stay fully responsible for the system? + Converts multi-channel `.mid` files into compact C99 SequenceStep struct arrays (`{frequency, duration, kick_drum, hi_hat}`), automatically routing MIDI Channel 10 and low bass notes (`< MIDI 50`) to hardware percussion buzzers.

+ +
+
+
+ +

Reverse-Engineering & Low-Level Study Log

+
+
+
+ Looking Under the Hood +

+ I study reverse engineering using Ghidra, x64dbg, radare2, and Cheat Engine to understand how compiled C/C++ binaries, memory layouts, calling conventions, and hardware registers work at the machine instruction level. +

+

+ Every time I inspect a compiled binary or debug an ESP32 panic backtrace, it reinforces why deep knowledge of C, memory alignment, and Assembly is indispensable. +

+
+
+
diff --git a/projects/index.html b/projects/index.html index 8bc7ffb..6fe2c3f 100644 --- a/projects/index.html +++ b/projects/index.html @@ -4,7 +4,7 @@ Projects — Ertunç Özbay - + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -42,117 +42,142 @@
- PROJECT SHOWCASE // REAL BUILDS -

Projects on My Bench

+ ⚡ PROJECT SHOWCASE // VERIFIED BUILDS & REPOSITORIES +

Engineering Projects & Open-Source Builds

- Here are the three real projects I am currently building and documenting. Because I value honesty in technical documentation, each project page lists only confirmed components and real progress—never invented specifications. + Every project documented here is backed by real hardware on my bench or shipped open-source code on my GitHub—complete with verified pinouts, schematics, build photos, and dedicated slots for upcoming YouTube Proof-of-Concept (PoC) demonstration videos.

- -

Current Projects (3)

+ +

All Projects (4)

-
- -
+
+ +
- Status: In progress - Project 01 + Rev 0.1 Built → Phase 2 Console + Project 01 • Embedded Hardware
-

Multi-Functional RC Controller

+

Multi-Functional RC Controller (MFC)

- An ongoing RC controller project focused on remote control hardware and hardware-software integration. + A custom 2.4 GHz wireless remote controller and multi-purpose embedded console built around the ESP32-S3-N16R8 and nRF24L01+ PA+LNA transceiver. Currently built as an early Rev 0.1 perfboard carrier and transitioning into a DT-100 (190×137×59 mm) desktop console with dual K-Silver Hall-effect gimbals and a 1.3" ST7789 IPS TFT display.

-

Confirmed technologies & focus:

    -
  • RC Control
  • -
  • Hardware-Software Integration
  • -
  • Open-Source Repo
  • +
  • ESP32-S3-N16R8
  • +
  • ESP-IDF v5.2.2 (C99)
  • +
  • nRF24L01+ 2.4 GHz RF
  • +
  • Hall-Effect Joysticks
  • +
  • ST7789 TFT + MicroSD
  • +
  • KiCad Schematic
-

What I am currently learning: Structuring an RC controller system so physical inputs and control software stay reliable and modular.

-

Next step: Documenting confirmed hardware choices, wiring notes, and iteration logs as testing progresses.

+

Includes on page: 3 early prototype build photos, full KiCad SVG schematic, verified ESP32-S3 GPIO pinout, Phase 2 DT-100 BOM, and 🎬 YouTube PoC Video Placeholder.

- -
+ +
- Status: In progress - Project 02 + Active Breadboard Synth + Project 02 • Audio & Dual-Core RTOS
-

RC and Autonomous Vehicle

+

MIDI Breadboard Instrument — Desk Rave 16-Track Symphony

- An ongoing project exploring RC control and autonomous vehicle behavior. This project is part of my effort to understand systems across electronics, control logic, and software. + A standalone dual-core ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer programmed in ESP-IDF v5.2.2, paired with a custom Python Run-Length Encoding (RLE) MIDI-to-C compiler (midi_to_c.py) driving a passive melody buzzer, two active drum buzzers, LEDs, and a hardware PCNT rotary encoder.

-

Confirmed technologies & focus:

-
    -
  • RC Control
  • -
  • Autonomous Behavior Exploration
  • -
  • Electronics
  • -
  • Control Logic & Software
  • -
- -
-

What I am currently learning: How manual RC control and autonomous decision logic interact with physical vehicle electronics.

-

Next step: Confirming and testing the hardware platform before publishing specific sensor or controller details.

-
-
- - -
- - -
-
-
- Status: In progress / Experimental - Project 03 -
-

MIDI Breadboard Instrument

-

- A breadboard-based project that plays MIDI melodies by converting MIDI data into C code for the device. The hardware currently includes two active buzzers, one passive buzzer, a rotary encoder, a 1.3-inch AMOLED display, two buttons, and two LEDs. -

- -

Confirmed components & tools:

    -
  • ESP32 Dual-Core (ESP-IDF v5.2.2)
  • -
  • Python RLE MIDI-to-C Compiler
  • -
  • 16-Track Flash Symphony
  • -
  • 2x Active Buzzers (Kick/Hat)
  • -
  • 1x Passive Buzzer (LEDC PWM)
  • -
  • 1x Rotary Encoder (PCNT)
  • -
  • 1.3" SPI OLED (30 FPS)
  • -
  • 2x Buttons & 2x LEDs
  • +
  • ESP32 Dual-Core (160 MHz)
  • +
  • Python RLE Compiler
  • +
  • 16-Track Flash Symphony
  • +
  • 3x Buzzers (Melody/Kick/Hat)
  • +
  • 1.3" SPI OLED (30 FPS)
  • +
  • PCNT Rotary Encoder
-

What I am currently learning: RLE compression of fragmented MIDI events into C struct arrays, acoustic transposition (+2 octaves) for passive piezo resonance, and Dual-Core FreeRTOS IPC between Core 0 (30 FPS OLED UI) and Core 1 (microsecond audio engine).

-

Next step: Migrating the dual-breadboard prototype onto a soldered perfboard or custom KiCad PCB.

+

Includes on page: 3 high-res breadboard photos, 16-track playlist table, ESP32 pinout, RLE compression architecture, and 🎬 YouTube PoC Video Placeholder.

+
+ + +
+
+
+ In Progress + Project 03 • Robotics & Control +
+

RC and Autonomous 4WD Vehicle

+

+ An ongoing 4WD robotic vehicle platform exploring manual 2.4 GHz RF remote control (paired with the Multi-Functional Controller) alongside autonomous obstacle avoidance, motor driver electronics, and real-time control logic. +

+ +
    +
  • 4WD Vehicle Platform
  • +
  • 2.4 GHz RF Receiver Link
  • +
  • Autonomous Control Logic
  • +
  • Power & Motor Electronics
  • +
+ +
+

Includes on page: System scope, manual-to-autonomous control transition notes, and 🎬 YouTube PoC Video Placeholder.

+
+
+ + +
+ + +
+
+
+ v1.0.0 Shipped + Project 04 • Rust & Linux Systems +
+

Point Blank on Linux — Standalone Community Launcher

+

+ A self-contained Linux desktop launcher written in Rust that runs Point Blank (Zepetto / TAM Game) on Arch, Ubuntu, and Fedora with 100% unmodified official CheatBlocker anti-cheat, automated Wine prefix & Winetricks provisioning (vcrun2022, d3dx11_43), and 200 FPS DirectX 9 / DirectX 11 borderless fullscreen support. +

+ +
    +
  • Rust
  • +
  • Wine / DirectX 9 & 11
  • +
  • 16-Byte TLS Runtime
  • +
  • Arch / Debian / Fedora
  • +
+ +
+

Includes on page: Architecture overview, Wine prefix automation breakdown, release links, and 🎬 YouTube PoC Video Placeholder.

+
+
+ +
@@ -164,7 +189,7 @@ diff --git a/projects/midi-breadboard-instrument.html b/projects/midi-breadboard-instrument.html index 521e726..f732f0b 100644 --- a/projects/midi-breadboard-instrument.html +++ b/projects/midi-breadboard-instrument.html @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -49,9 +49,9 @@
Status: Active Breadboard Prototype - Project 03 // ESP32, ESP-IDF C99, FreeRTOS & Python RLE Tooling + Project 02 // ESP32 Dual-Core • ESP-IDF C99 • FreeRTOS • Python RLE
-

MIDI Breadboard Instrument — Desk Rave & 16-Track Symphony Controller

+

MIDI Breadboard Instrument — Desk Rave & 16-Track Symphony

A standalone, dual-core ESP32 MIDI synthesizer, drum sequencer, and 30 FPS SPI OLED visualizer written in ESP-IDF v5.2.2 (C99 / FreeRTOS), powered by a custom Run-Length Encoding (RLE) Python MIDI-to-C compiler.

@@ -59,14 +59,33 @@ What started as making a passive piezo buzzer squeak evolved into a full 16-track embedded music box with live kick/hi-hat drum transients, hardware PCNT quadrature rotary controls for real-time tempo and volume scaling, and dual-core FreeRTOS task isolation.

+ +
+
+ +

YouTube Proof-of-Concept Demonstration

+ +
+ + 🎥 YouTube PoC Video — Recording / Coming Soon +
Desk Rave 16-Track ESP32 MIDI Synthesizer — Live Audio & 30 FPS OLED Demo
+

+ Upcoming YouTube video showcasing live playback across the 16-track flash playlist (Careless Whisper, Rondo Alla Turca, Seven Nation Army +2 octave transpose), real-time rotary speed/volume tweaking, and synchronized kick/hi-hat buzzers + LEDs. +

+
+
+
+
- Block diagram of the MIDI Breadboard Instrument showing the MIDI conversion script producing C code for the breadboard system, connected to two active buzzers, one passive buzzer, a 1.3-inch SPI OLED screen, one rotary encoder, two buttons, and two LEDs. + Block diagram of the MIDI Breadboard Instrument showing the MIDI conversion script producing C code for the breadboard system
Software-to-hardware pipeline: Python RLE MIDI compiler (midi_to_c.py) generating flash-resident SequenceStep struct arrays for the dual-core ESP32 breadboard synthesizer.
@@ -74,22 +93,22 @@
- +
-
- Full dual-breadboard overview of the ESP32 MIDI Breadboard Instrument +
+ Full dual-breadboard overview of the ESP32 MIDI Breadboard Instrument
Full Breadboard Layout: Dual-breadboard build featuring the ESP32 DevKit, 1.3" 7-pin SPI OLED display, KY-040 rotary encoder, tactile buttons, passive melody piezo, and dual active drum buzzers.
-
- Active 1.3-inch SPI OLED visualizer running at 30 FPS on the breadboard +
+ Active 1.3-inch SPI OLED visualizer running at 30 FPS on the breadboard
30 FPS Live OLED Visualizer: Custom 5×7 font renderer displaying track code (WHISP), rotary mode (SPD / VOL), kick/hi-hat drum boxes, and dynamic frequency bars.
-
- Close-up of the rotary encoder, tactile buttons, LEDs, and three buzzers +
+ Close-up of the rotary encoder, tactile buttons, LEDs, and three buzzers
Controls & Acoustic Stage: Close-up of the rotary encoder, Play/Pause and Next Track buttons, green/red drum LEDs, and the 3-buzzer audio stage.
@@ -195,14 +214,13 @@

Current State & Roadmap

-
- Current State +
+ Current State & Next Steps

The firmware is rock-solid on the breadboard: the rotary encoder dynamically scales volume and tempo via lockless IPC variables, all 16 tracks play from flash memory, and the 1.3" SPI OLED renders real-time frequency bars and drum hits at 30 FPS.

- Next Steps

- Migrating the dual-breadboard circuit onto a soldered perfboard or custom KiCad PCB, and optionally re-integrating a WS2812B addressable RGB strip when expanding the enclosure. + Next Step: Migrating the dual-breadboard circuit onto a soldered perfboard or custom KiCad PCB.

@@ -214,7 +232,7 @@ diff --git a/projects/multi-functional-controller.html b/projects/multi-functional-controller.html index 2b60897..94482c5 100644 --- a/projects/multi-functional-controller.html +++ b/projects/multi-functional-controller.html @@ -3,8 +3,8 @@ - Multi-Functional RC Controller — Projects — Ertunç Özbay - + Multi-Functional RC Controller (MFC) — Projects — Ertunç Özbay + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -48,77 +48,160 @@
- Status: In progress - Project 01 // Hardware + Software + Status: Rev 0.1 Carrier Built → Phase 2 Console Expansion + Project 01 // ESP32-S3-N16R8 • 2.4 GHz RF • ESP-IDF C99
-

Multi-Functional RC Controller

+

Multi-Functional RC Controller (MFC)

- An ongoing project related to RC control and hardware-software integration. + A custom 2.4 GHz wireless transmitter and embedded control console powered by an ESP32-S3-N16R8 (Dual-Core LX7 @ 240 MHz, 16 MB Flash, 8 MB Octal PSRAM) and an nRF24L01+ PA+LNA RF transceiver. +

+

+ Designed to serve as a universal handheld and desktop transmitter for external robotic platforms (such as my 4WD RC & Autonomous Vehicle) while integrating dual K-Silver Hall-effect joysticks, a 1.3" ST7789 IPS TFT display, MicroSD storage, and MAX4466 audio capture.

-
- -

What This Project Is About

-

- The Multi-Functional RC Controller is an ongoing hardware-and-software build where I explore how a single remote controller can be designed, programmed, and adapted for practical RC applications. -

-

- Rather than treating a controller as a sealed black box, I want to understand both the physical interface and the software logic that translates user input into control actions. -

+ +
+
+ +

YouTube Proof-of-Concept Demonstration

+ +
+ + 🎥 YouTube PoC Video — Recording / Coming Soon +
ESP32-S3 Multi-Functional Controller — Hardware & 2.4 GHz RF Telemetry Demo
+

+ Upcoming YouTube demonstration covering the Rev 0.1 perfboard carrier power-on test, 2.4 GHz nRF24L01+ packet transmission, Hall-effect gimbal ADC sampling, and ST7789 IPS TFT UI rendering. +

+
+
-
- -

Confirmed Scope & Repository

+ +
+ + +

+ Note: The photos below show the very early Phase 1 (Rev 0.1) perfboard carrier build (click any image to zoom). Currently populated: female/male pin header sockets, 100 µF electrolytic bulk decoupling capacitor, ESP32-S3-N16R8 module, nRF24L01+ 2.4 GHz radio header, and 3.3V/5V/GND power distribution rails. These photos will be updated as the Phase 2 DT-100 desktop console modules are installed. +

+
+
+ Top view of the early Rev 0.1 Multi-Functional Controller perfboard carrier +
+ Top View (Rev 0.1): Early perfboard carrier showing dual 22-pin female header sockets for the ESP32-S3, power rail pin headers, and the 100 µF bulk capacitor. +
+
+
+ Side view of the Multi-Functional Controller with 2.4 GHz nRF24L01+ SMA duck antenna +
+ RF Transceiver Profile: Side profile with the nRF24L01+ PA+LNA 2.4 GHz module and external SMA whip antenna mounted on the carrier. +
+
+
+ Bottom solder-side point-to-point wiring of the Rev 0.1 perfboard carrier +
+ Bottom Solder Routing: Hand-soldered point-to-point bus and power distribution traces on the underside of the phenolic perfboard. +
+
+
+
+ + +
+ +

Early KiCad 9.0 Schematic (mfc-1.svg)

+
+ KiCad schematic diagram of the ESP32-S3 Multi-Functional Controller +
+ Early prototype KiCad schematic (mfc-1.kicad_sch) — click to zoom full-screen. +
+
+
+ + +
+ +

Master Node GPIO Allocation

+

+ Because the ESP32-S3-N16R8 reserves GPIO 35–37 internally for its 8 MB Octal PSRAM and 16 MB SPI Flash, all peripherals are mapped across safe ADC1, SPI2, and PCNT pins: +

- - + + + - - + + + - - + + + - - + + + - - + + + - - + + + + + + + + + + + + + + + + + +
ItemConfirmed DetailSubsystem / PeripheralESP32-S3 GPIOInterface & Engineering Notes
Project NameMulti-Functional RC ControllerDual Hall-Effect Joysticks (4 Axes)GPIO 4, 5, 6, 712-bit SAR ADC1 (LX, LY, RX, RY) — avoids ADC2 Wi-Fi/RF conflicts
Current StatusIn progressMAX4466 Electret Mic PreampGPIO 1ADC1_CH0 analog audio envelope & FFT voice input
Source Repositorygithub.com/ertunc-ozbay/multi-functional-controllerShared SPI2 Bus (MOSI / MISO / SCK)GPIO 11 / 13 / 12High-speed SPI2 bus shared by nRF24L01+, ST7789 TFT, and MicroSD
Core FocusRC control and hardware-software integrationnRF24L01+ 2.4 GHz RadioCE: 9, CSN: 10Dedicated 100 µF electrolytic + 100 nF ceramic decoupling on 3.3V rail
Hardware & Protocol SpecsDetails will be documented as the project develops.1.3" ST7789 IPS TFT (240×240)CS: 40, DC: 41, RST: 42Hardware Chip Select added so TFT shares SPI2 cleanly with nRF24 & SD
MicroSD Card ModuleCS: 39Stores telemetry logs, profiles, and UI assets over SPI2
Rotary Encoder (KY-040)CLK: 15, DT: 16, SW: 17Hardware PCNT quadrature decoder with 1000 ns glitch filter
2N2222A BJT Low-Side SwitchGPIO 21 (via 1 kΩ base R)Drives external loads with 1N4001 / 1N5817 flyback protection
-
- -

What I Am Currently Learning & Next Steps

-
- What I Am Currently Learning + +
+ +

From Rev 0.1 Carrier to the DT-100 Desktop Console

+
+ Phase 2 Hardware Upgrade (Direnc.net Procurement List)

- How physical control inputs, embedded software structure, and clear technical documentation come together when designing a custom controller from scratch. -

- Next Step -

- Details will be documented as the project develops. As each hardware stage and software iteration is tested on the bench, I will publish confirmed component lists and build logs here and in the Blog. + The controller is transitioning from the bare Rev 0.1 perfboard carrier into a professional desktop console housing. Once the Phase 2 components below are mounted, the ESP-IDF firmware will be updated with drivers for each module:

+
    +
  • Enclosure: DT-100 Desktop Instrument Case (Black ABS, 190 × 137 × 59 mm)
  • +
  • Joysticks: 2× K-Silver High-Precision Hall-Effect 2-Axis Gimbals
  • +
  • Display & Storage: 1.3" ST7789 IPS TFT LCD (240×240) + SPI MicroSD Card Module
  • +
  • Audio Preamp: MAX4466 Electret Microphone Amplifier with Adjustable Gain
  • +
  • Power & Switching: MT3608 2A DC-DC Boost Converter, 12–24V White LED Waterproof Latching Switch, KTS303 3-Pin Toggle Switch, 180° Slide Switch
  • +
  • Discrete Protection: 2N2222 NPN BJT Transistor, 1N5817 1A 20V Schottky Diode, 1N4001 1A 50V Rectifier Diode (DO-41)
  • +
@@ -129,7 +212,7 @@ diff --git a/projects/pointblank-linux.html b/projects/pointblank-linux.html new file mode 100644 index 0000000..a738295 --- /dev/null +++ b/projects/pointblank-linux.html @@ -0,0 +1,157 @@ + + + + + + Point Blank on Linux (Standalone Rust Launcher) — Projects — Ertunç Özbay + + + + + + + + + +
+
+ + +
+
+
+ Status: v1.0.0 Released + Project 04 // Rust • Linux Systems • Wine & DirectX 9/11 +
+

Point Blank on Linux — Standalone Community Launcher

+

+ An all-in-one standalone Linux desktop launcher written in Rust that runs Point Blank (Zepetto / TAM Game) on Linux with 100% unmodified official game files and native CheatBlocker anti-cheat (CB.exe + CB.cbm). +

+

+ Built on Arch Linux without requiring Heroic, Lutris, or external wrappers—featuring automated Wine prefix & Winetricks provisioning, 16-byte TLS-aligned runtime support for DirectX 11, multi-region authentication, and native 1920×1080 borderless fullscreen at 200 FPS. +

+ +
+ + +
+
+ +

YouTube Proof-of-Concept Demonstration

+ +
+ + 🎥 YouTube PoC Video — Recording / Coming Soon +
Point Blank Running Natively on Arch Linux (DX11 / 200 FPS / Official CheatBlocker)
+

+ Upcoming YouTube proof-of-concept gameplay and setup walkthrough showing prefix auto-provisioning, DirectX 11 200 FPS performance on Linux, and unmodified CheatBlocker anti-cheat execution. +

+
+
+
+ +
+ +

Solving Low-Level Windows-on-Linux Compatibility

+

+ Running legacy 32-bit/64-bit online Windows games with kernel/user-mode anti-cheat modules like CheatBlocker on Linux often fails due to unaligned Thread Local Storage (TLS) allocations in `ntdll.dll`, missing Visual C++ MFC redistributables, and broken WebView2 login flows. +

+
    +
  • 16-Byte TLS-Aligned Runtime for DirectX 11: Automatically provisions a 16-byte TLS-aligned `ntdll.dll` Wine runtime so both DirectX 9 (`DXVersion = 9`) and DirectX 11 (`DXVersion = 11`) render cleanly without crashes.
  • +
  • One-Click Isolated Prefix Provisioning: Configures `~/.local/share/pointblank-linux/prefix` with `vcrun2022` (`mfc140.dll`, `msvcp140.dll`, `vcruntime140.dll`), `d3dx9_31..43`, `d3dcompiler_43`, `d3dx11_43`, and Edge WebView2 (`109.0.1518.78`).
  • +
  • In-Game `F11` Borderless Fullscreen Helper: Compiles a lightweight MinGW-w64 helper utility for instant 1920×1080 borderless fullscreen switching at 200 FPS.
  • +
+
+ +
+ +

Confirmed Capabilities & Supported Distros

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
SubsystemSpecification
Primary LanguageRust (Standalone Linux `x86_64` executable)
Anti-Cheat Compatibility100% Unmodified Official CheatBlocker (`CB.exe` + `CB.cbm`)
Render PipelinesDirectX 9 & DirectX 11 (1920×1080 Borderless Fullscreen @ 200 FPS)
Supported Linux DistributionsArch Linux / CachyOS / Manjaro, Ubuntu / Debian / Mint / Pop!_OS, Fedora / Nobara
Source & Binary Releasesgithub.com/ertunc-ozbay/pointblank-linux
+
+
+ +
+
+ + + + + + diff --git a/projects/rc-autonomous-vehicle.html b/projects/rc-autonomous-vehicle.html index c4eb311..6398ea0 100644 --- a/projects/rc-autonomous-vehicle.html +++ b/projects/rc-autonomous-vehicle.html @@ -3,8 +3,8 @@ - RC and Autonomous Vehicle — Projects — Ertunç Özbay - + RC and Autonomous 4WD Vehicle — Projects — Ertunç Özbay + @@ -17,7 +17,7 @@ Ertunç Özbay - workshop // notebook // lab + embedded // hardware // open-source @@ -48,27 +48,47 @@
- Status: In progress - Project 02 // Electronics, Control Logic & Software + Status: In Progress + Project 03 // 4WD Robotics, Control Logic & 2.4 GHz Telemetry
-

RC and Autonomous Vehicle

+

RC and Autonomous 4WD Vehicle

- An ongoing project exploring RC control and autonomous vehicle behavior. This project is part of my effort to understand systems across electronics, control logic, and software. + A standalone 4WD robotic vehicle project exploring manual 2.4 GHz wireless control (paired with my Multi-Functional RC Controller) and autonomous obstacle-avoidance behavior.

+ +
+
+ +

YouTube Proof-of-Concept Demonstration

+ +
+ + 🎥 YouTube PoC Video — Recording / Coming Soon +
4WD RC & Autonomous Vehicle — Wireless Drive & Control Loop Test
+

+ Upcoming YouTube demonstration covering 2.4 GHz remote drive response from the Multi-Functional Controller, motor driver PWM tuning, and autonomous mode switching. +

+
+
+
+

Why I Am Building This

- A vehicle project sits right at the intersection of the subjects I care about most: physical electronics, control logic, and software decision-making. If a software routine makes a bad assumption, you see it immediately in how the physical vehicle behaves. + A physical vehicle sits right at the intersection of the subjects I care about most: power electronics, closed-loop control logic, and real-time embedded decision-making. If a firmware routine makes a bad timing assumption or power transients aren't filtered properly, you see it immediately in how the vehicle behaves on the floor.

- Through this ongoing build, I want to explore both manual RC control and autonomous behavior step by step, connecting what I study in circuit analysis and embedded programming to a moving system. + This project is maintained strictly separate from the transmitter console so that the vehicle node and the Multi-Functional RC Controller communicate over a clean, modular 2.4 GHz packet protocol.

@@ -85,19 +105,19 @@ Project Name - RC and Autonomous Vehicle + RC and Autonomous 4WD Vehicle Status - In progress + In progress (Hardware & control loop integration) - Areas Explored - RC control, autonomous behavior, electronics, control logic, and software + Companion Transmitter + ESP32-S3 Multi-Functional RC Controller (MFC) - Specific Hardware & Algorithms - Details will be documented as the project develops and components are confirmed through testing. + Core Focus Areas + Manual 2.4 GHz RC drive, autonomous behavior exploration, motor drive electronics, and embedded control software @@ -106,14 +126,14 @@

What I Am Currently Learning & Next Steps

-
+
What I Am Currently Learning

- Understanding how electronics, control logic, and software layers depend on one another when transitioning between manual remote control and autonomous vehicle behavior. + Understanding how power supply decoupling, motor driver PWM control, and wireless telemetry packets interact when transitioning smoothly between manual remote control and autonomous vehicle behavior.

Next Step

- Details will be documented as the project develops. I am keeping this page strictly grounded—only adding sensors, microcontrollers, communication protocols, and test results after I confirm them on the workbench. + Publishing the dedicated vehicle repository, chassis photos, and the YouTube Proof-of-Concept drive video once bench and floor testing are complete.

@@ -125,7 +145,7 @@