I continued planning how to resume consistent detailing work, choose a replacement vehicle, and add independent water and power. Better equipment organization, customer acquisition, and booking were also priorities rather than completed changes.
I researched the Mazda3 Hatchback and Honda Civic Sport as possible daily drivers that could also carry detailing equipment. I considered cargo space, water and power storage, and equipment access without making a final selection or purchase.
I reviewed how relying on customers for water and electricity limited where I could detail cars. I started planning a compact setup with its own water, power, and organized equipment storage. I had not purchased or installed the proposed setup.
I started a personality overhaul to make JOS more consistent and direct, with less generic assistant language. I wanted its responses to feel more familiar and better matched to the conversation.
I explored visual directions for JOS, including terminal-inspired type and simple symbols. I also considered a startup animation, but neither a final logo nor a finished animation was established.
I started extending personality settings into user-facing configuration. Controls for humor, directness, energy, and formality were still being developed.
I started designing a dedicated offline page for when Homebase is unreachable. It could show limited, non-sensitive connection information instead of a generic error, but it was not deployed.
I started a broader interface redesign, including dashboard spacing, cards, typography, and grouping. I also worked on collapsible sidebar categories to make the growing navigation easier to use. This redesign was still in progress.
I improved the organization of Codex tasks so their states were easier to scan. I also updated how individual scholarship opportunities showed details such as deadlines, eligibility, and status.
I added Codex Bridge to connect JOS to its development environment. I was still investigating why it could appear offline away from home even when Tailscale was active.
I started planning a dedicated offline page for times when Homebase cannot be reached. It could show limited, non-sensitive connection information, but it was not deployed.
I started investigating why Codex Bridge could appear offline away from home even with Tailscale active. I checked which network interfaces and addresses the bridge was listening on; the issue was still under investigation.
I worked on putting system configuration under System → Settings, starting with appearance and Codex options. More settings were planned, but the full settings system was still in development.
I built my portfolio and began designing a workflow for JOS to draft updates that could be applied to its repository. Public updates would still require my approval; this did not establish a working publishing connection.
I began exploring Apple Watch health data and Sleep Focus changes as a trigger for a JOS morning briefing. I also questioned whether this would be more useful than simply scheduling the briefing. It remained an experiment.
I revisited the briefing idea with more context about my day, upcoming exams, projects, and relevant news. This was planning work, not a completed briefing system.
I made owner authentication the default and protected the API routes and documentation. I also tightened session handling, added login and request limits, and separated Codex worker authentication.
I added owner authentication and protected API access to the public JOS deployment. The work also covered session cookies, login limits, and separate authentication for Codex worker routes.
A power outage shut down Homebase and the services running on it. I began work on a UPS and server upgrade plan, including battery backup and controlled shutdown; those upgrades were not finished.
I clarified that my LAN address, Tailscale address, and usejos.com all pointed to the same application. I did not need separate versions for each connection method.
I confirmed that the LAN address, Tailscale address, and usejos.com all reached the same JOS application. They were different ways to access it, not separate deployments.
I added a Scholarship section and planned how it could help discover and track opportunities. Ranking, eligibility checks, and automatic discovery were broader design goals, not all finished features.
I expanded the Courses page toward a dashboard with clearer course information and upcoming work. I focused on making assignments, deadlines, and course status easier to see.
I moved usejos.com toward the Homebase-hosted application and checked DNS, HTTPS, and tunnel connectivity. A Cloudflare 1033 error helped identify that the tunnel connector was unavailable.
I started exploring how JOS could use configurable AI models. Support for different providers, local models, or models for specific tasks was still experimental.
I looked into connecting Canvas for assignments, deadlines, and course information. My institution restricted student-created API tokens, so the direct integration was blocked.
I defined a workflow where JOS can suggest adding a capability but must ask me before changing its code. I wanted to keep control of which changes get made.
Google Calendar authorization needed repair on the headless Homebase server. I used SSH port forwarding for the browser callback, renewed access, and restarted the backend to restore it.
I connected the development workflow to Codex and added Codex Drafts to track proposed tasks. Code changes require my approval, followed by implementation, testing, and review.
I connected JOS to Google Calendar so it could use my actual schedule. This gave it access to events and deadlines instead of relying only on information I typed into chat.
I worked on a briefing concept that would include my schedule, free time, study priorities, and project suggestions. It was still a plan rather than a finished daily workflow.
Saving a syllabus did not automatically let JOS answer questions about grading, attendance, or course policies. I still needed to improve how it reads and retrieves the relevant parts of those documents.
I improved the workflow for reviewing, approving, and rejecting extracted assignments. I kept the course name visible, added Reject All, and moved adding assignments to the calendar to the final step.
I set the rule that JOS could help draft and organize portfolio updates, but I would approve public changes. This described the publishing policy rather than a tested integration.
I reviewed the split between application storage on the SSD and Plex media on the external drive. I also started planning more memory, better backups, battery backup, and a better server setup. These were upgrade plans, not completed installations.
I began moving JOS from private LAN and Tailscale access to usejos.com. Cloudflare Tunnel connected the public site to Homebase without directly forwarding router ports.
I connected JOS to Google Calendar on Homebase. Later, I used SSH port forwarding to complete browser authorization for the headless server and restored the integration after renewing access.
I added persistent syllabus storage on Homebase and linked uploads to courses in PostgreSQL. I confirmed that a CHM 111 syllabus was stored and tracked as uploaded.
I added persistent storage for uploaded syllabi and linked the files to course records in PostgreSQL. I confirmed that a CHM 111 syllabus was uploaded and tracked.
SSH worked through Tailscale, but the JOS webpage initially did not. I checked service bindings, ports, and firewall settings to work out why the web application was not reachable.
I investigated sleep, suspend, hibernation, and automatic shutdown settings. Homebase needed to stay available as more of my applications depended on it.
After starting classes, I decided JOS should keep track of course information instead of making me explain it repeatedly. I focused on courses, syllabi, assignments, and deadlines.
I started replacing Jarvis references across the code, interface, prompts, and configuration. I also registered usejos.com and moved toward keeping the assistant’s identity in one configuration.
The backend, model connection, identity layer, and web interface were coming together. I built and tested a service to create conversations and save and retrieve messages before connecting it to the main chat API.
I built a workflow for uploading syllabi and planned the extraction steps around reviewing the results before saving them. I wanted to approve course and assignment information rather than trust AI extraction automatically.
I started planning how JOS could connect school, business, projects, coding, files, and other tools. This was the direction for the project, not a set of finished integrations.
I connected saved conversations to the interface and checked that history stayed available after refreshing. I added conversation switching, New Chat, and navigation for desktop and mobile.
I added a dedicated identity and personality layer for JOS. This keeps its name, tone, and communication rules separate from the AI model underneath it.
I built the backend with Python and FastAPI and added PostgreSQL for persistent data. I introduced Alembic migrations so database changes could be tracked as the project grew.
I set up Tailscale, MagicDNS, and Tailscale SSH for private access to Homebase. I was able to manage the server from my Mac while away from home without exposing SSH publicly.
JOS began storing conversations and messages in PostgreSQL. I checked that conversations stayed available after refreshing the page and switching between chats.
I got the web interface to send a message to the AI model and display its response. I also designed a PostgreSQL-backed memory system for conversation context, tasks, and longer-term information; that design was separate from getting chat working.
I started running my personal assistant project on Homebase, initially under the name Jarvis. It later became JOS and grew into the main application on the server.
I outlined how JOS could help with business tasks, marketing reminders, and scheduling. Calendar and Notion connections were part of the plan, not all completed integrations.
I wanted a self-hosted assistant that could remember context and help with my calendar, tasks, projects, and detailing business. I planned to use it from my computer and phone, with voice as a later goal.
Homebase became unreachable over SSH. I checked the Ethernet connection, host address, and SSH service, and learned to distinguish Docker bridge addresses from the server’s LAN address.
I continued using YesterDay Car Detailing across the website and service offerings. I also worked on keeping the identity consistent as I planned marketing channels.
I separated the design into identity, conversation, memory, planning, tools, and interface components. I wanted the AI model to be one part of the application rather than the whole application.
By July, Homebase was running Portainer, Plex, Pi-hole, Netdata, Minecraft, and WG-Easy. It had become the server I used for several projects rather than just a Linux experiment.
As JOS grew, I set up its backend, frontend, PostgreSQL database, and persistent file storage on Homebase. I also introduced Alembic migrations to keep track of database changes.
I documented the main detailing packages and optional add-ons so customers could compare services and starting prices. The packages covered exterior, interior, combined, and more detailed services.
I set up Plex and connected an external drive for movies and TV. This gave me practice with Linux mounts and keeping container data on persistent storage.
I installed Docker and Docker Compose to run services in separate containers. This let me update or restart one service without changing everything on the server.
I developed the YesterDay Car Detailing website and used Homebase to host it during this period. I worked with a domain, Linux hosting, networking, and deployments; this does not describe where the website is hosted today.
I planned before-and-after photos, short videos, and local promotion through social and business platforms. I also considered a $5-per-day Facebook and Instagram ad budget. These were marketing plans, not a record of campaigns run or money spent.
I added Portainer to manage containers and check their logs. I also set up Netdata to see how the server was using CPU, memory, storage, and network resources.
I continued operating the business while balancing school, athletics, and other commitments. This period gave me more experience with scheduling, customer service, and managing my time.
I developed my detailing techniques and gained experience communicating with customers and coordinating appointments. I also learned to manage supplies, equipment, and operating expenses.