DEV Community

Marcin Firmuga
Marcin Firmuga

Posted on

Monday Grind Blueprint #2: 80 Processes Explained, 3 Issues Targeted, 1 Week to Ship

Nobody needs another AI feature.

They need to know if svchost.exe is safe or a virus.
I spent Easter weekend building something embarrassingly simple: a JSON file that explains what 80+ Windows processes actually do.
Not machine learning. Not blockchain integration. Not "AI-powered insights."
Just context.
And it works better than I expected.

The Problem: Task Manager Shows Data, Not Understanding
Open Task Manager right now. You'll see:

svchost.exe — 6 instances, 800MB RAM
dwm.exe — 40% CPU spike
RuntimeBroker.exe — Random activity
System — Always at the top

What do you do?
Google "is svchost.exe a virus?"
Read 10 forum threads.
Still not sure.
Maybe kill the process.
Break something.
PC_Workman now solves this in 0.5 seconds:
Hover on svchost.exe in the chat →
Service Host Process
Microsoft Corporation
Hosts Windows services. Multiple instances are normal.
Power: Low-Medium
Safety: Safe (part of Windows)
CPU: 1-15% per instance
RAM: 50-200MB per instance
Done.
No Google. No paranoia. Just facts.

Easter Weekend: From "Too Tired" to "Shipped"
Context:
Week 1 at Żabka retail: 5:30 AM starts, solo store shifts by day 5, 20 zł/h (~$5/hour).
Monday plan: Process library + timestamps + 2 articles
Tuesday-Friday reality: Too exhausted to code after 9-hour shifts
Saturday-Sunday: Redemption arc
What shipped:

process_library.json — 80+ process definitions
process_library.py — Loader with lookups
tooltip.py — Hover UI widget
Integration in panel.py — Regex binding for chat

Time: ~4 hours total
Difficulty: Medium (Tkinter events + regex)
Impact: HIGH (users finally understand what processes are)

What I Built: The Process Library System
File 1: process_library.json (The Data)
Location: PC_Workman_HCK/data/process_library.json
Size: 80+ definitions (will grow to 150+)
Categories:

System: explorer.exe, svchost.exe, dwm.exe, csrss.exe
Browsers: chrome.exe, firefox.exe, edge.exe, opera.exe, brave.exe
Gaming: steam.exe, valorant.exe, leagueoflegends.exe, fortnite.exe, minecraft.exe
Development: python.exe, node.exe, code.exe, docker.exe, git.exe
Communication: discord.exe, teams.exe, zoom.exe, slack.exe
Media: spotify.exe, vlc.exe, obs64.exe, photoshop.exe
Productivity: excel.exe, word.exe, notion.exe, outlook.exe
Utilities: 7zfm.exe, winrar.exe, everything.exe
Virtualization: vmware.exe, virtualbox.exe

Structure:
json{
"chrome.exe": {
"name": "Google Chrome",
"vendor": "Google LLC",
"category": "browser",
"description": "Web browser. RAM usage increases with open tabs.",
"power_usage": "high",
"safety": "safe",
"typical_cpu": "5-25%",
"typical_ram": "200-800MB per window"
},
"svchost.exe": {
"name": "Service Host Process",
"vendor": "Microsoft Corporation",
"category": "system",
"description": "Hosts Windows services. Multiple instances are normal.",
"power_usage": "low_medium",
"safety": "safe",
"typical_cpu": "1-15% per instance",
"typical_ram": "50-200MB per instance"
}
}

No AI-generated descriptions. All written in plain English, human-verified.

File 2: process_library.py (The Loader)
Location: PC_Workman_HCK/hck_gpt/process_library.py
What it does:

Loads JSON on startup
Provides case-insensitive lookups
Formats tooltip text for display

Implementation:
pythonclass ProcessLibrary:
` """Loads process definitions from JSON and provides lookups"""

def __init__(self):
    self.processes = {}
    self._load_library()

def _load_library(self):
    """Load process_library.json"""
    lib_path = os.path.join(
        os.path.dirname(__file__), 
        '..', 
        'data', 
        'process_library.json'
    )

    if os.path.exists(lib_path):
        with open(lib_path, 'r', encoding='utf-8') as f:
            self.processes = json.load(f)
        print(f"[ProcessLibrary] Loaded {len(self.processes)} process definitions")

def get_process_info(self, process_name):
    """Case-insensitive lookup"""
    return self.processes.get(process_name.lower().strip())

def format_tooltip_text(self, process_name):
    """Format for display"""
    info = self.get_process_info(process_name)
    if not info:
        return None

    return f"""📦 {info['name']}
Enter fullscreen mode Exit fullscreen mode

{info['vendor']}

{info['description']}

Power: {info['power_usage']}
Safety: {info['safety']}
CPU: {info['typical_cpu']}
RAM: {info['typical_ram']}"""

Singleton instance

process_library = ProcessLibrary()`
Why singleton? One load at startup, shared across all components.

File 3: tooltip.py (The UI Widget)
Location: PC_Workman_HCK/hck_gpt/tooltip.py
What it does:

Creates borderless tooltip window
Positions near mouse cursor
Displays formatted process information
Auto-hides on mouse leave

Implementation:
pythonclass ProcessTooltip:
` """Shows tooltip on hover over process names"""

def __init__(self, parent):
    self.parent = parent
    self.tooltip_window = None

def show(self, event, process_name, tooltip_text):
    """Show tooltip at mouse position"""
    if not tooltip_text:
        return

    self.hide()  # Destroy old tooltip

    # Create borderless window
    self.tooltip_window = tk.Toplevel(self.parent)
    self.tooltip_window.wm_overrideredirect(True)
    self.tooltip_window.wm_attributes("-topmost", True)

    # Position near mouse
    x = event.x_root + 20
    y = event.y_root + 10
    self.tooltip_window.wm_geometry(f"+{x}+{y}")

    # Styled frame + label
    frame = tk.Frame(
        self.tooltip_window,
        bg=THEME["bg_panel"],
        highlightbackground=THEME["accent2"],
        highlightthickness=2,
        padx=12,
        pady=8
    )
    frame.pack()

    label = tk.Label(
        frame,
        text=tooltip_text,
        bg=THEME["bg_panel"],
        fg=THEME["text"],
        font=("Consolas", 9),
        justify="left"
    )
    label.pack()

def hide(self):
    """Destroy tooltip"""
    if self.tooltip_window:
        self.tooltip_window.destroy()
        self.tooltip_window = None`
Enter fullscreen mode Exit fullscreen mode

Positioning logic: +20px right, +10px down from cursor to avoid blocking text.

File 4: panel.py (The Integration)
Location: PC_Workman_HCK/hck_gpt/panel.py
What changed:

Import process library:
`
pythonimport re

try:
from hck_gpt.process_library import process_library
from hck_gpt.tooltip import ProcessTooltip
HAS_PROCESS_LIBRARY = True
except ImportError:
HAS_PROCESS_LIBRARY = False
print("[hck_GPT] Process library not available")

Initialize tooltip in init:

python# Tooltip system
self.tooltip = ProcessTooltip(parent) if HAS_PROCESS_LIBRARY else None

Bind tooltips method:

pythondef _bind_process_tooltips(self):
"""Scan chat text for process names and bind hover events"""
if not HAS_PROCESS_LIBRARY or not self.tooltip:
return

# Get all text
content = self.log.get("1.0", "end-1c")

# Search for .exe patterns
exe_pattern = r'\b\w+\.exe\b'

for match in re.finditer(exe_pattern, content, re.IGNORECASE):
    process_name = match.group(0)

    # Check if process exists in library
    info = process_library.get_process_info(process_name)

    if info:
        # Create unique tag
        tag_name = f"process_{process_name}_{match.start()}"

        # Add tag to text
        # (Tkinter text index conversion logic here)
        self.log.tag_add(tag_name, start_pos, end_pos)

        # Style the tag (underline, color)
        self.log.tag_config(
            tag_name,
            foreground=THEME["accent2"],
            underline=True
        )

        # Bind hover events
        tooltip_text = process_library.format_tooltip_text(process_name)

        self.log.tag_bind(
            tag_name,
            "<Enter>",
            lambda e, pn=process_name, tt=tooltip_text: 
                self.tooltip.show(e, pn, tt)
        )

        self.log.tag_bind(
            tag_name,
            "<Leave>",
            lambda e: self.tooltip.hide()
        )
Enter fullscreen mode Exit fullscreen mode

Call after adding messages:

pythondef add_message(self, msg):
# ... add text to chat
self._bind_process_tooltips() # Scan and bind`
Regex pattern: r'\b\w+.exe\b' matches word boundaries + .exe extension (case-insensitive)
Why unique tags? Same process can appear multiple times in chat — each occurrence needs separate hover binding.

Why This Matters
Before process library:
User: "epicgames.exe is using 40% CPU — is that normal?"
Action: Google → Reddit → forum threads → paranoia → maybe kill process
After process library:
User hovers on epicgames.exe

Epic Games Launcher
Epic Games, Inc.
Game distribution platform. Updates games in background.
Power: Medium-High
Safety: Safe
CPU: 10-40% (during updates)
RAM: 300-800MB
Enter fullscreen mode Exit fullscreen mode

User: "Oh, it's updating games. That's fine."
Result: Informed decision instead of guessing.

This Week's Plan: 3 Issues from Roadmap 1.7.8
Full roadmap: https://github.com/users/HuckleR2003/projects/3/views/2?pane=issue&itemId=166508113&issue=HuckleR2003%7CPC_Workman_HCK%7C17
Total issues to v1.7.8: 17
Selected for this week: 3

Issue #1: Missing tests, discussions, packaging

Source: GitHub issue from Mary-devz (community feedback)
Problem:

No automated tests yet
Need discussion about update mechanisms
Packaging strategy unclear

Plan:

Set up pytest framework
Create test suite for core modules
Discuss auto-update vs manual download strategy
Define packaging requirements for Microsoft Store

Why this matters: Community feedback = roadmap priorities

Issue #2: [UI] Main dashboard button graphics redesign

Source: Own issue
Problem:

Current buttons functional but inconsistent
Need final visual style before Store submission
Button states (normal/hover/active) need polish

Plan:

Finalize button style guide
Redesign primary controls (Start Monitoring, Settings, Reports)
Implement hover animations
Ensure accessibility (contrast ratios, click targets)

Why this matters: UI = first impression for new users

Issue #3: [Code] Optimize hck_gpt/ modules

Source: Own issue
Problem:

Multiple small files in hck_gpt/ folder
Some code duplication
Performance could be better

Plan:

Analyze module dependencies
Consolidate related functionality
Remove duplicate code
Profile performance bottlenecks
Document optimization decisions

Why this matters: Clean code = easier maintenance = faster feature development

Build-in-Public Philosophy
Why share the struggle?
Because "I planned X, did Y" is more valuable than "look at my perfect progress."
Week 1 reality:

Monday: Ambitious plan
Tuesday-Friday: Too tired after Żabka
Saturday-Sunday: Catch-up sprint
Monday: Selective focus on 3 issues

Not shipping everything. Shipping what matters.
The gap between plan and execution = the actual content.

Current State & Goals
Today:

Day job: Żabka retail (20 zł/h, 1-2 months bridge)
Dev time: Weekends + evenings when possible
PC_Workman: v1.7.0 (process library shipped)

This week:

Close 3 issues from roadmap
Build momentum toward v1.7.8

April target:

v1.7.8 feature-complete
All critical issues resolved

Q3 2026:

Microsoft Store submission
Public release v2.0

June-July 2026:

Exit Żabka → Junior dev role

What's Next
Process library expansion:

Target: 150+ definitions by v1.7.8
Community contributions (submit PRs with process definitions)
Auto-categorization for unknown processes (future)

This week deliverables:

Test framework setup + initial tests
UI button redesign completed
hck_gpt/ optimization documented

Long-term vision:

Microsoft Store release
Cross-platform support (Linux, macOS)
Process behavior learning (detect unusual patterns)

Try It Yourself
PC_Workman v1.7.0:

GitHub: https://github.com/HuckleR2003/PC_Workman_HCK
Free, open source, portable .exe
Windows 10/11

Process library:

JSON format (easy to extend)
MIT license
Contributions welcome

GitHub, here :)
All my links here :)

About the Author
I’m Marcin Firmuga. Solo developer and founder of HCK_Labs.

I created PC Workman , an open-source, AI-powered
PC resource monitor
built entirely from scratch on dying hardware during warehouse
shifts in the Netherlands.
This is the first time I’ve given one of my projects a real, dedicated home.

Before this: game translations, PC technician internships, warehouse operations in multiple countries, and countless failed projects I never finished.

But this one? This one stuck.
800+ hours of code. 4 complete UI rebuilds. 16,000 lines deleted.
3 AM all-nighters. Energy drinks and toast.

And finally, an app I wouldn’t close in 5 seconds.
That’s the difference between building and shipping.

PC_Workman is the result.

Top comments (0)