<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ahnaf Ashique Adi</title>
    <description>The latest articles on DEV Community by Ahnaf Ashique Adi (@ahnafashiqueadi).</description>
    <link>https://dev.to/ahnafashiqueadi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2201917%2Fcb552f7a-9ec7-4b96-90f0-cd1a6e6b10d7.jpeg</url>
      <title>DEV Community: Ahnaf Ashique Adi</title>
      <link>https://dev.to/ahnafashiqueadi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ahnafashiqueadi"/>
    <language>en</language>
    <item>
      <title>💻 Hacking the Grid: How I Built CypherCore with Amazon Q CLI</title>
      <dc:creator>Ahnaf Ashique Adi</dc:creator>
      <pubDate>Fri, 23 May 2025 18:59:55 +0000</pubDate>
      <link>https://dev.to/ahnafashiqueadi/hacking-the-grid-how-i-built-cyphercore-with-amazon-q-cli-575a</link>
      <guid>https://dev.to/ahnafashiqueadi/hacking-the-grid-how-i-built-cyphercore-with-amazon-q-cli-575a</guid>
      <description>&lt;p&gt;&lt;strong&gt;🧠 Introduction&lt;/strong&gt; &lt;br&gt;
I wanted to build something vibe-heavy, immersive, and original — a retro-futuristic hacking sim you’d expect inside a cyberpunk movie.&lt;/p&gt;

&lt;p&gt;So I made CypherCore — a Matrix-style puzzle game created using Python, Pygame, and Amazon Q CLI, an AI-powered coding assistant from AWS.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyk0wkwmqwpc2fwtzy3cg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyk0wkwmqwpc2fwtzy3cg.jpeg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CypherCore&lt;/strong&gt; isn’t just another retro game. While many rebuild classics like Pong or Tetris, I set out to create something that felt like you were diving headfirst into a digital mainframe. &lt;/p&gt;

&lt;p&gt;Built with Python, Pygame, and the generative power of &lt;strong&gt;Amazon Q CLI&lt;/strong&gt;, CypherCore simulates hacking terminals with logic puzzles and glitch aesthetics — all made on a &lt;strong&gt;Hackintosh ThinkPad&lt;/strong&gt; running macOS Monterey.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚡️ The twist?&lt;/strong&gt;&lt;br&gt;
I built the entire thing using natural language prompts, on a Hackintosh ThinkPad running macOS. No fancy rig. Just vibes and AI&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎮 What Is CypherCore?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;CypherCore is a puzzle game set inside a simulated mainframe. The aesthetics are straight out of 90s hacker lore: ASCII visuals, green-glow Matrix animations, glitch FX, and logic-based gameplay.&lt;/p&gt;

&lt;p&gt;🔐 Game Highlights:&lt;br&gt;
Hacker terminal UI with Matrix-style backgrounds&lt;br&gt;
 Four cyberpunk-themed levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; Binary Maze – Grid navigation + timing&lt;/li&gt;
&lt;li&gt;Logic Gate Puzzle – Unlock via AND/OR logic&lt;/li&gt;
&lt;li&gt;Memory Decryption – Short-term memory challenge&lt;/li&gt;
&lt;li&gt;Core Breach – Rhythm-based circuit tapping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Built using modular code generated and refined with &lt;strong&gt;Amazon Q CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Playable entirely via keyboard&lt;/p&gt;

&lt;p&gt;⚙️ My Setup&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;💻 Device: ThinkPad T490 running macOS Monterey (Hackintosh)&lt;/li&gt;
&lt;li&gt;🧠 AI Assistant: Amazon Q CLI&lt;/li&gt;
&lt;li&gt;🐍 Language: Python 3.13+&lt;/li&gt;
&lt;li&gt;🎮 Framework: Pygame&lt;/li&gt;
&lt;li&gt;🧰 Tools:  VS Code, Homebrew, GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🔧 How I Installed Everything (on macOS)&lt;/strong&gt;&lt;br&gt;
Firstly we have to install python and pygame on macOS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install python
pip3 install pygame
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here pip3 can be found in python but for brew we have to install Homebrew first using the terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After downloading brew we now move forward to download Amazon's Q CLI as the AI Assistant using brew typing :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
brew install amazon-q

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After downloading amazon q we can check its version typing-&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
q --version
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After getting the output we are ready to start prompting and making our game.But first we login to Q typing :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;q login
q chat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After Amazon Q's chat session is turned on we can start by giving it a prompt and try to give life to your imagination.For my case I have made some small games using unity and unreal so I already had an structured idea of what I wanted to Prototype.So at first I prompted:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a Python game called "CypherCore" using only Python and Pygame.

Start with an animated ASCII intro in the terminal using a typewriter + glitch effect for the following logo:

      ___                       ___         ___           ___           ___           ___           ___           ___           ___     
     /  /\          ___        /  /\       /__/\         /  /\         /  /\         /  /\         /  /\         /  /\         /  /\    
    /  /:/         /__/|      /  /::\      \  \:\       /  /:/_       /  /::\       /  /:/        /  /::\       /  /::\       /  /:/_   
   /  /:/         |  |:|     /  /:/\:\      \__\:\     /  /:/ /\     /  /:/\:\     /  /:/        /  /:/\:\     /  /:/\:\     /  /:/ /\  
  /  /:/  ___     |  |:|    /  /:/~/:/  ___ /  /::\   /  /:/ /:/_   /  /:/~/:/    /  /:/  ___   /  /:/  \:\   /  /:/~/:/    /  /:/ /:/_ 
 /__/:/  /  /\  __|__|:|   /__/:/ /:/  /__/\  /:/\:\ /__/:/ /:/ /\ /__/:/ /:/___ /__/:/  /  /\ /__/:/ \__\:\ /__/:/ /:/___ /__/:/ /:/ /\
 \  \:\ /  /:/ /__/::::\   \  \:\/:/   \  \:\/:/__\/ \  \:\/:/ /:/ \  \:\/:::::/ \  \:\ /  /:/ \  \:\ /  /:/ \  \:\/:::::/ \  \:\/:/ /:/
  \  \:\  /:/     ~\~~\:\   \  \::/     \  \::/       \  \::/ /:/   \  \::/~~~~   \  \:\  /:/   \  \:\  /:/   \  \::/~~~~   \  \::/ /:/ 
   \  \:\/:/        \  \:\   \  \:\      \  \:\        \  \:\/:/     \  \:\        \  \:\/:/     \  \:\/:/     \  \:\        \  \:\/:/  
    \  \::/          \__\/    \  \:\      \  \:\        \  \::/       \  \:\        \  \::/       \  \::/       \  \:\        \  \::/   
     \__\/                     \__\/       \__\/         \__\/         \__\/         \__\/         \__\/         \__\/         \__\/    

After the intro, create a transition to a green Matrix-style raining code background using Pygame (CMatrix visual effect) as the main background layer.

Then present the player with a terminal-based binary maze puzzle (only 0s and 1s) using the `curses` library for better full-screen interactivity.

After solving the maze, switch back to Pygame where the player must solve a logic gate puzzle. They’ll input correct AND/OR combinations to unlock a digital lock and progress to the next level.

Requirements:
- Use Python standard libraries and Pygame only
- Modular, beginner-friendly code with comments
- Reusable classes for effects, levels, logic gates, and maze
- Support arrow keys and typing input where necessary
- Include basic sound effects and level transition effects

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;🔁 Prototype 1: Terminal Crash &amp;amp; Memory Overload&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Issue: The ASCII logo was rendered in the terminal with print() in a loop, crashing the system due to memory overrun.&lt;/p&gt;

&lt;p&gt;After almost like 10 min I got the cool looking prototype where the CypherCore is printed in the terminal in a loop and the window of the game being blank and  a memory overload crashed the game.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbiley2cb8bwxczrmrrh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhbiley2cb8bwxczrmrrh.jpeg" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fix: Prompted &lt;strong&gt;Q CLI&lt;/strong&gt; to use &lt;strong&gt;pygame.Surface&lt;/strong&gt; and animated the text line-by-line with a typewriter effect in the game window.&lt;/p&gt;

&lt;p&gt;After this Q thought for a while and helped to fix the issue making the new intro and the main menu in the game window as we can see here:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz9emj3ds7j4bmceq3hkr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz9emj3ds7j4bmceq3hkr.jpeg" alt="Image description" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1w16p52a2vun2rgiy8fi.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1w16p52a2vun2rgiy8fi.jpeg" alt="Image description" width="800" height="419"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;After the main menu was fixed I was able to see all the first levels created in the prototype.The initial levels generated was only 2 out of the 4 i theorized and those two are shown here :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfrmlhe1c2iqci6rvvt3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfrmlhe1c2iqci6rvvt3.jpeg" alt="Image description" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusyeazmfh98k6xge9e0l.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fusyeazmfh98k6xge9e0l.jpeg" alt="Image description" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this was not the game I wanted so I rewrote the whole prompt to :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a Python game called "CypherCore" using only Pygame and Python standard libraries.

Overview:
"CypherCore" is a futuristic, cyberpunk-themed puzzle adventure game. It includes an animated ASCII intro, a dynamic Matrix-style background, 4 unique levels, background music, sound effects, and a hacker-inspired UI.

Requirements:

1. Intro Screen:
- Display the CypherCore ASCII logo in a Pygame window.
- Animate the logo with a typewriter effect and glitchy flicker.
- Play simple looped hacker-style music during the intro (e.g., synth pad).
- ASCII Art should appear in the Pygame window (not the terminal).

2. Matrix Background:
- After the intro, display a full-screen "CMatrix"-like effect.
- Rain down green characters in columns like the Matrix movie.
- Overlay UI and levels on top of this effect.

3. Levels (modularize using LevelManager):
- Level 1: Binary Maze
  - Maze made of 0s and 1s.
  - Move player with arrow keys.
  - Timer and highlighted correct path.

- Level 2: Logic Gate Puzzle
  - Nodes connected by logic gates (AND, OR, NOT).
  - Player clicks gates and inputs binary values to unlock.
  - Show feedback for correct/incorrect answers.

- Level 3: Memory Decryption
  - Grid of hidden memory sectors.
  - Show a hint pattern briefly, then hide.
  - Player must recall and decrypt sectors in correct order.

- Level 4: Core Breach Timing
  - Animated circuits rotate around a central core.
  - Tap in rhythm to unlock nodes without hitting traps.
  - Use sound cues for timing help.

4. Visual Style:
- Use cyberpunk colors (black, neon green, glitch red/blue).
- Neon glowing text and transitions.
- Futuristic fonts and smooth animations.

5. Audio:
- Loop background music (simple synth or ambient).
- Sounds for unlock, fail, success, and transitions.

6. Code Structure:
- Use clean classes and modules:
  - LevelManager: controls level transitions
  - MatrixEffect: handles dynamic background
  - Puzzle: base class for levels
  - AudioEngine: for music and sound effects
- Write beginner-friendly, well-commented code.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the prompt was given it made the code in a very structured way.&lt;/p&gt;

&lt;p&gt;** 📦 Project Structure**&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CypherCore/
├── main.py
├── LICENSE
├── README.md
├── audio_engine.py
├── matrix_effect.py
├── level_manager.py 
└──  requirements.txt

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So after a while q created a good file structure and very modular codes for all the part of the game and with improved UI and everything we got to see : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgyo4ucmkjf8elk1w2od.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flgyo4ucmkjf8elk1w2od.jpeg" alt="Image description" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx38u6byf39uju7fmn140.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx38u6byf39uju7fmn140.jpeg" alt="Image description" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98fzu4doc5ths4rlfs24.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F98fzu4doc5ths4rlfs24.jpeg" alt="Image description" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxjgxebh2vr8se0kzjq5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxjgxebh2vr8se0kzjq5.jpeg" alt="Image description" width="800" height="622"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Even after getting the codes and the game running as we can see above that didn't mean it was completed it had lots off problems. Like :-&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔁 Prototype 2: Broken Countdown Timer &amp;amp; Static Background&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Issue: Q CLI added a 60-second global timer affecting all levels.&lt;/li&gt;
&lt;li&gt;Result: Levels would timeout before completion.&lt;/li&gt;
&lt;li&gt;Fix: Refactored using LevelManager, giving each level its own    timer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To fix it a different prompt was given to handle the timer in a different way which fixed it.Other that that I have seen only some part of the game has sound but some doesn't this is a bug that I found but had little town to fix similar to the logic gate puzzle may  have a bug sometimes when pressed it just assumes you are right. Other than that the game is playable. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧠 My Experience with Amazon Q CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using Amazon Q CLI for CypherCore felt like coding with a co-pilot that actually gets the vibe. Here’s what stood out:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
- Speed: I didn’t waste time writing boilerplate. Q CLI handled that instantly—menus, classes, event loops—it filled in the blanks fast.
- Creative Fuel: Even when I had a clear idea, Q CLI threw in variations or reminded me of better patterns. Sometimes, it shifted my design for the better.
- Learning in Flow: Whether I blanked on syntax or wanted to structure something clean, Q CLI acted like a cheat sheet that explained itself. It’s great for devs leveling up.
- Problem Solving: When I hit logic walls—like managing level timers or handling broken audio modules—Q CLI gave solid fixes I could adapt fast.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Of course, it’s not magic. You have to be clear with prompts, and what it gives is often a launchpad—not the final product. But that’s the beauty of it. You’re not just using AI to code; you’re jamming with it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎮 Conclusion:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Building CypherCore wasn’t just about making a game — it was about pushing the limits of creativity with AI as a coding partner. Amazon Q CLI turned out to be way more than just a code generator; it became part of my process. From kickstarting ideas to solving logic puzzles in real time, it made the whole build faster, smoother, and honestly, way more fun.&lt;/p&gt;

&lt;p&gt;The final result? A neon and purplish-drenched cyberpunk puzzle game made with Python and vibes — and proof that with the right tools, even wild ideas can turn into something real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🛠 Want to Build Your Own?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If this sparked something in you, here’s what I recommend:&lt;br&gt;
Try out Amazon Q CLI for your next game idea — just open the terminal, start a chat, and prompt it like you're explaining to a dev buddy.&lt;/p&gt;

&lt;p&gt;Check out the Amazon Q CLI Game Challenge for step-by-step guidance, and maybe even score a free tee. &lt;br&gt;
Here:- &lt;a href="https://s12d.com/BGWQCLI" rel="noopener noreferrer"&gt;https://s12d.com/BGWQCLI&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use my journey as a reference — break things, fix them, and have fun doing it.&lt;/p&gt;

&lt;p&gt;🧪 Source Code: GitHub – &lt;a href="https://github.com/Ahnaf-Ashique-Adi/CypherCore" rel="noopener noreferrer"&gt;https://github.com/Ahnaf-Ashique-Adi/CypherCore&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Game on, hacker.&lt;/strong&gt; AI isn’t here to replace us — it’s here to amplify us. Tools like Amazon Q CLI don’t just spit out code; they collaborate. You bring the vision, the vibe, the weird ideas. AI helps you bring it to life — faster, cleaner, and sometimes in ways you wouldn’t have thought of alone.&lt;/p&gt;

&lt;p&gt;Sure, it’s not perfect. You still have to debug, tweak, and stitch the pieces together. But that’s the beauty of it. It’s like pair-programming with a tireless assistant who’s always ready to throw ideas at you.&lt;/p&gt;

&lt;p&gt;For me, CypherCore was a test — could I vibe-code an entire game with just prompts and imagination? Turns out, yes. And that’s just the beginning&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awschallenge</category>
      <category>amazonqcl</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Why Do We Need a Server ISO? Can’t We Make a Server Using a Desktop ISO?</title>
      <dc:creator>Ahnaf Ashique Adi</dc:creator>
      <pubDate>Sat, 12 Oct 2024 12:07:10 +0000</pubDate>
      <link>https://dev.to/ahnafashiqueadi/why-do-we-need-a-server-iso-cant-we-make-a-server-using-a-desktop-iso-337n</link>
      <guid>https://dev.to/ahnafashiqueadi/why-do-we-need-a-server-iso-cant-we-make-a-server-using-a-desktop-iso-337n</guid>
      <description>&lt;h1&gt;
  
  
  Why Do We Need a Server ISO? Can’t We Make a Server Using a Desktop ISO?
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqm973xaepu8o4lc7xs7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqm973xaepu8o4lc7xs7.jpeg" alt="Image description" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When embarking on the journey of setting up a server, one of the first questions that arise is whether to use a server or desktop ISO.&lt;br&gt;
 This topic is essential for anyone looking to create a robust server environment, especially for projects like personal cloud servers. In this blog post, I’ll explore the differences between Linux server and desktop versions and share my personal experience of setting up a Nextcloud server on an old Acer laptop running Ubuntu.&lt;/p&gt;
&lt;h2&gt;
  
  
  Linux Server vs. Desktop: What’s the Difference?
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Purpose and Optimization
&lt;/h3&gt;

&lt;p&gt;*&lt;em&gt;Resource Usage: *&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*&lt;em&gt;Server ISO: *&lt;/em&gt; Designed to operate efficiently with minimal resources, making it ideal for hosting services. It often comes without a graphical user interface (GUI) by default, which helps conserve system resources.&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Desktop ISO: *&lt;/em&gt; Includes a GUI and a wide array of applications suited for general use, which may consume more resources. This can be unnecessary for a server setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*&lt;em&gt;Software Packages: *&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*&lt;em&gt;Server ISO: *&lt;/em&gt; pre-installed packages focus on server functionalities (e.g., web servers, databases) and are optimized for performance and stability.&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Desktop ISO: *&lt;/em&gt; Comes with various applications and utilities aimed at end-user functionality, which might not be needed for a server.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;*&lt;em&gt;Maintenance and Updates: *&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;*&lt;em&gt;Server ISO: *&lt;/em&gt; Typically receives updates that prioritize security and performance for server applications.&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Desktop ISO: *&lt;/em&gt; Updates can include features that are not relevant to a server environment, possibly introducing unnecessary complexities.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Flexibility and Usability
&lt;/h3&gt;

&lt;p&gt;While the server ISO is tailored for server tasks, I found that the desktop version could effectively create a server environment. As someone who recently undertook this challenge, the familiarity of the desktop interface was invaluable. It allowed me to perform various tasks beyond mere server operations, turning my journey into a unique learning experience.&lt;/p&gt;
&lt;h2&gt;
  
  
  Conclusion on the Choice
&lt;/h2&gt;

&lt;p&gt;Ultimately, the decision between a server and desktop ISO depends on the user's familiarity with Linux, the resources available, and the specific needs of the project. In many cases, particularly for personal projects, using a desktop ISO can be an excellent starting point.&lt;/p&gt;
&lt;h2&gt;
  
  
  Setting Up a Personal Nextcloud Server on Ubuntu (Desktop Version)
&lt;/h2&gt;

&lt;p&gt;After deciding to use the desktop version of Ubuntu for my personal cloud server, I embarked on the following steps:&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1: Update Your System
&lt;/h3&gt;

&lt;p&gt;I began by updating my system to ensure all packages were current. This is essential for security and performance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
sudo apt upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Install Required Packages
&lt;/h3&gt;

&lt;p&gt;Next, I installed the packages required for Nextcloud, including Apache, MySQL, and PHP.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install apache2 mariadb-server php libapache2-mod-php php-mysql php-xml php-curl php-zip php-gd php-mbstring php-intl php-bcmath
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Problem Encountered: PHP Compatibility Issues&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Initially, I tried to install PHP 8.3, which Nextcloud does not support. This led to the error message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This version of Nextcloud is not compatible with PHP&amp;gt;=8.3. You are currently running 8.3.6.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To resolve this, I researched the issue and discovered that Nextcloud requires PHP 8.1 or lower. I downgraded to PHP 8.1 by updating my package list and installing the correct version:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt install php8.1 libapache2-mod-php8.1 php8.1-mysql php8.1-xml php8.1-curl php8.1-zip php8.1-gd php8.1-mbstring php8.1-intl php8.1-bcmath
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Configure the Database
&lt;/h3&gt;

&lt;p&gt;I secured my MariaDB installation and created a database for Nextcloud.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mysql_secure_installation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After securing the installation, I created a database:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CREATE DATABASE nextcloud;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: Ensure you replace 'your_password' with a strong password.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Download Nextcloud
&lt;/h3&gt;

&lt;p&gt;I downloaded the latest version of Nextcloud from the official website and extracted it to the Apache web directory.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
wget https://download.nextcloud.com/server/releases/nextcloud-x.y.z.zip
unzip nextcloud-x.y.z.zip
sudo mv nextcloud /var/www/html/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Configure Apache
&lt;/h3&gt;

&lt;p&gt;To serve Nextcloud, I created a new virtual host configuration file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo nano /etc/apache2/sites-available/nextcloud.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I added the following configuration (replacing &lt;code&gt;1xx.xxx.x.x&lt;/code&gt; with your local IP):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;VirtualHost *:80&amp;gt;
    ServerName 1xx.xxx.x.x
    DocumentRoot /var/www/html/nextcloud

    &amp;lt;Directory /var/www/html/nextcloud&amp;gt;
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
    &amp;lt;/Directory&amp;gt;

    ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
    CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After saving the file, I enabled the site and necessary Apache modules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo a2ensite nextcloud
sudo a2enmod rewrite
sudo systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 6: Access Nextcloud
&lt;/h3&gt;

&lt;p&gt;I accessed Nextcloud through my browser using the local IP address. Here, I was greeted by the Nextcloud setup page.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Complete the Setup
&lt;/h3&gt;

&lt;p&gt;On the setup page, I entered the database details and created an admin account. The installation took a few minutes. I was relieved to finally see the Nextcloud dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 8: Security Configuration
&lt;/h3&gt;

&lt;p&gt;To enhance security, I attempted to configure SSL using Let's Encrypt. However, I encountered an issue when trying to obtain a certificate for my private IP address:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;One or more of the entered domain names was not valid: 1xx.xxx.x.x&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As Let's Encrypt does not issue certificates for bare IP addresses, I opted to create a self-signed certificate instead. This allows me to test the server securely without incurring costs. Here’s how I created a self-signed certificate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo apt install openssl
sudo mkdir /etc/ssl/private
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/selfsigned.key -out /etc/ssl/certs/selfsigned.crt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During this process, I filled in the details as prompted. For the Organizational Unit, since it’s a personal project, I simply used “Personal Project.”&lt;/p&gt;

&lt;p&gt;Next, I updated the Apache configuration to use the self-signed certificate:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;VirtualHost *:443&amp;gt;
    ServerName 1xx.xxx.x.x
    DocumentRoot /var/www/html/nextcloud

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/selfsigned.crt
    SSLCertificateKeyFile /etc/ssl/private/selfsigned.key

    &amp;lt;Directory /var/www/html/nextcloud&amp;gt;
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
    &amp;lt;/Directory&amp;gt;

    ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
    CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
&amp;lt;/VirtualHost&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I then enabled the SSL module and restarted Apache:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo a2enmod ssl
sudo systemctl restart apache2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 9: Mounting the External SSD for Storage
&lt;/h3&gt;

&lt;p&gt;To expand my storage capacity, I decided to mount an external SSD. This step was crucial for enhancing the storage capabilities of my Nextcloud server. I mounted the SSD by following these commands:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identify the SSD:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo fdisk -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;Create a mount point: *&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo mkdir /mnt/nextcloud_data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*&lt;em&gt;Mount the SSD: *&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

sudo mount /dev/sdX1 /mnt/nextcloud_data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;(Replace &lt;code&gt;/dev/sdX1&lt;/code&gt; with your actual SSD identifier.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To make the mount permanent, I added it to &lt;code&gt;/etc/fstab&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

echo '/dev/sdX1 /mnt/nextcloud_data ext4 defaults 0 2' | sudo tee -a /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Final Steps: Testing and Future Improvements
&lt;/h2&gt;

&lt;p&gt;After completing the setup, I tested Nextcloud by uploading files and checking functionalities like sharing and collaboration. Everything worked smoothly!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Setting up a personal cloud server with Nextcloud on my Ubuntu laptop was a rewarding experience. Each challenge, from PHP compatibility issues to SSL certificate generation, provided valuable learning opportunities. Ultimately, this journey reinforced my technical skills and passion for exploring the possibilities within the Linux ecosystem.&lt;/p&gt;

&lt;p&gt;By choosing the path less traveled—using a desktop ISO—I transformed an old laptop into a powerful cloud server, proving that with determination and adaptability, even the most daunting tasks can lead to remarkable achievement.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzjg1zv42oiktl07z0dh.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzjg1zv42oiktl07z0dh.jpeg" alt="Image description" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
