Zhicheng's Blog
Chronicles of a

Programmer, Analyst, and Designer.

Currently debugging  life.py

Welcome to my blog! This blog chronicles my journey of building things (currently interested in LLM-powered features) and figuring out life.

As a born designer who stumbled into data science before learning his first programming language (Python), I believe software is the (current) ultimate vehicle for great thinking and building.

But tools still need analytics to act as proof, and design to make them effortlessly digestible.

I live for these intersections, treat this as my playground for validating life thoughts by building them out, automating the (unfortunately essential) stuff to free up the fun. Think of it as me trying to debug life while getting better at debugging programs. Fueled by an insatiable curiosity (and AI's endless patience), I'm pretty confident this entire script will be error-free by the end of this century.

Active Systems

šŸŒ Dossigraphica Macro Geo Intelligence

Visualizing corporate entities network mapping via LLM pipeline extractions.

šŸ“ NearPulse Micro Geo Intelligence

Micro-neighborhood dashboard analysis tool.

šŸ“ø Shotwise Photography

AI photography analyzer & aesthetic scoring platform.

šŸ“ˆ AperilexLabs Filing Analysis

Financial analytics and corporate filing insights.

Journal App • 2025-07-05 • 3 min read

From Static to Dynamic - A Foundational Refactor for Synapse

Technical debt often manifests as rigidity. Our application’s journal feature was a prime example, built on a hardcoded assumption that all activities were either ā€œWorkā€ or ā€œLifeā€. This was simple to implement initially but impossible to scale. Every user’s life is more nuanced than that binary choice. This post outlines a foundational refactor to move from this static system to a dynamic, user-driven one.

#LLM #architecture #refactoring #prisma
READ_MORE ->
Journal App • 2025-07-02 • 3 min read

Building AI-Powered Weekly Reports in Synapse

Raw data is valuable, but insights are transformative. Synapse has been good enough at capturing daily activities, but the next logical step has always been to synthesize that data into high-level understanding. Today’s task is to implement the new feature on the roadmap: AI-Powered Weekly Reports. This feature moves beyond simple data retrieval and uses LLM to analyze a week’s worth of activities, generating a concise, structured summary of your time allocation, key accomplishments, and emerging trends.

#LLM #AI #Next.js #Zod
READ_MORE ->
Journal App • 2025-06-30 • 4 min read

Optimizing Semantic Search: A Two-Stage Reranker

Previously in Synapse, we have a core feature: an agentic semantic search system (Still confused what actually makes RAG, a RAG and what’s the difference between it and semantic search? They both seem to intersect. But like Andrew Ng mentioned in one of the interviews, how to define if an agent is truly autonomous? How? maybe the definition does not matter, as long as the agent works itself.) that allows users to ask natural language questions about their activities. The initial version was a standard, three-step pipeline: a Planner agent to generate keywords, a Retrieval step using those keywords against the database, and a Synthesizer agent to generate a summary. This worked, but it suffered from the classic limitation of keyword search—it lacked true semantic understanding. A query for ā€œtime spent on backend improvementsā€ might miss an entry described as ā€œrefactored the authentication service.ā€

#LLM #Architecture #AI #RAG #Search
READ_MORE ->
Journal App • 2025-06-29 • 4 min read

Building an Agentic RAG Pipeline for Journal Analysis

Today, I implemented one of the new features proposed on roadmap in my personal journal analysis app: a semantic search and synthesis engine. Instead of a traditional keyword search, I opted for an ā€œAgentic RAGā€ (Retrieval-Augmented Generation) pipeline. This approach leverages a local LLM (gemma3n:latest) not just for generating text, but for orchestrating the entire search process. This post outlines the design thinking behind this implementation and its future potential.

#LLM #Agentic RAG
READ_MORE ->
Journal App • 2025-06-27 • 6 min read

From .txt to Web App: Building a Journaling System with Gemini's Help

For a while now, I’ve maintained a daily journal in a simple text file. It’s a straightforward system: I write the date, then list my activities under WORK: and LIFE: headers. This approach is simple and low-friction, but as the file grew, its limitations became obvious. Searching for specific activities was a grep-and-pray operation, and any form of analysis was purely manual. The data had no structure.

#LLM #Engineering #Gemini #Next.js #Journaling #Voice Input
READ_MORE ->
SEC Analysis • 2025-06-24 • 4 min read

Containerization: A Case Study in Environment and Configuration Management

Today’s objective was to containerize the SEC filing analysis application to ensure a consistent and reproducible runtime environment. This process involved not only creating the necessary Docker artifacts but also refactoring the application’s configuration to adhere to best practices for handling secrets and environment-specific variables.

#Python #Docker #Docker Compose #Configuration Management #Environment Variables #Troubleshooting
READ_MORE ->
SEC Analysis • 2025-06-22 • 4 min read

The Illusion of Quarterly Data: Correctly Calculating Financials from SEC Filings

When building financial analysis tools, one of the most common and dangerous assumptions is that the financial data you receive—whether from an API or directly from SEC filings—represents discrete, isolated time periods. A ā€œQ2ā€ report, for instance, should contain data only for the second quarter. Right? Unfortunately, this is often not the case. Raw SEC filings, specifically the quarterly 10-Q and annual 10-K reports, follow reporting rules that can be misleading if taken at face value. In this post, I’ll walk through the challenges of parsing these documents and present a robust Python solution to derive true, discrete quarterly financial figures.

#Python #FastAPI #Finance #Data Engineering #SEC #10-K #10-Q
READ_MORE ->
SEC Analysis • 2025-06-19 • 4 min read

Mess in SEC Financial Filings: A new Challenge of Data Extraction

In the world of financial data extraction, the challenge of parsing and interpreting complex documents is ever-present. As I continue to refine my financial analysis tool, I’ve encountered a new set of challenges that highlight the messy nature of financial filings. This post delves into these issues and how they impact the accuracy and reliability of data extraction.

#Python #Data Extraction #Financial Filings
READ_MORE ->
Reading • 2025-06-18 • 4 min read

Reading Notes: Thinking, Fast and Slow by Daniel Kahneman

This week I’ve started reading the second book in 2025 after finishing ā€œThe Psychology of Moneyā€ by Morgan Housel. The book is ā€œThinking, Fast and Slowā€ by Daniel Kahneman. This book delves into the dual systems of thought that govern our decision-making processes.

#Book Notes #Psychology
READ_MORE ->
SEC Analysis • 2025-06-14 • 4 min read

Refactoring for Resilience: Introducing a Database Caching Layer

For our financial analysis tool, the latest series of updates focuses on an architectural enhancement: the integration of a persistent database layer for caching, performance tracking, and data retention. This post details the changes, the rationale behind them, and how they set the stage for future development.

#Python #FastAPI #SQLAlchemy #Caching #Refactoring #Software Engineering
READ_MORE ->