In Weeks 2 and 3 of my software engineering internship at Fiducia AI, I transitioned from developing augmented reality features for sports fan engagement to leading a new activation focused on AI-driven fungal disease detection in vineyards. During this period, I worked extensively on migrating backend services to modern frameworks, refining large language model (LLM) prompts, and improving testing and architectural practices. This post provides a detailed, technical overview of my experience, key learnings, and the challenges I tackled along the way.
Context
Fiducia AI's platform (called SpeedShotX) delivers mobile-first "activations". They're essentially zero-code AR/AI demos that overlay digital content onto a live camera feed. In Week 2, our intern team was focused on designing a Cal Bears Women's Basketball activation, which overlays player stats and AR jerseys in a fan's camera view. By Week 3, our scope expanded: we needed to ensure the platform could easily pivot to new use cases. Leadership challenged me to propose and lead a new activation, and we decided on a vineyard "Fungal Detection" AI demo for CITRIS. The context switched from sports highlights to plant disease identification, but the underlying technical problem remained: how to apply Fiducia's core architecture (an LLM-powered, retrieval-augmented pipeline) to different domains without sacrificing quality or speed.
High-Level Idea
Prompt Engineering & Context Design
On the AI side, we refined how we prompt and feed data to our LLMs. We learned that simplicity in prompts often yields the best results. For example, instead of a complex multi-step query for our basketball activation, we used a single clear instruction: "Extract the jersey numbers and explain the game setting." We also centralized our domain knowledge into a single context file (a structured .txt with roster details for the team), which the LLM could reference for factual accuracy. This context approach is essentially a lightweight form of Retrieval-Augmented Generation (RAG). This approach provides the model with relevant data on the fly.
Adaptive Activation Architecture
Perhaps most importantly, we kept the activation architecture consistent across projects. The new fungal detection activation was designed to mirror the same "capture → inference → UI" flow as the sports demo. A user captures an image (of a grapevine in this case), an inference step runs LLM logic to analyze it, and the UI displays an AR overlay with insights. By reusing this proven pipeline, we demonstrated the platform's flexibility to serve any vertical, whether that be sports or agriculture, with minimal changes to the underlying system.
With this high-level game plan, we moved into implementation. The following sections provide a deep dive into the technical highlights of these two weeks.
Highlights
AR Activation & 3D Integration for Sports
Delivering the Cal WBB activation was a crash course in AR development and 3D asset integration. As part of a small "3D/Action" sub-team, I worked on incorporating a 3D model of a basketball into the SpeedShotX web app. This involved uploading the jersey model in the proper format (we standardized on GLB for 3D models) and ensuring it rendered correctly on mobile devices. I learned to keep polygon counts low and file sizes small for performance. We also enforced strict media formats for all assets (MP4 for videos, JPG for images, GLB for 3D) to avoid any runtime incompatibilities across browsers.
A key challenge here was performance optimization. Large AR content can be slow to load on phones, so I researched edge caching and content compression techniques. For images, we enabled client-side compression (around 0.7 quality) before upload to reduce payload without noticeable quality loss. For 3D models, I investigated lighter weight formats and how Content Delivery Networks might cache those models closer to the user. These efforts paid off in smoother, faster AR overlays, crucial for a good user experience.
Finally, we instrumented the activation with analytics hooks, so that every user interaction (e.g. scanning the QR code) was logged on our dashboard. This data would feed back to sponsors to prove engagement ROI. This reminds us that technical success is also measured by business impact.
Spring Boot Migration & API Test Development
In parallel with our activation project, I contributed to the backend team's ongoing migration effort to Spring Boot, specifically by developing robust unit tests for critical API endpoints. While the core engineering team handled refactoring Java services into Spring Boot's modern structure, my responsibility centered on ensuring endpoint reliability through comprehensive testing.
I began by thoroughly reviewing recorded walkthroughs of our existing API contracts, carefully documenting request and response structures, key business logic, and any special cases. With these specifications clearly mapped out, I wrote targeted JUnit 5 unit tests covering standard usage scenarios ("happy paths") as well as various edge cases such as error handling and invalid inputs. To streamline this process, I leveraged Spring Boot's built-in testing utilities to effectively mock necessary repositories and service layers.
Cursor IDE proved especially valuable here; I often prompted it to generate initial tests, such as validating correct JSON responses or HTTP status codes. Although Cursor accelerated initial drafts, I manually refined these tests, carefully ensuring accuracy, completeness, and alignment with our code quality standards.
This test-driven approach played a critical role in maintaining confidence during migration, as comprehensive test coverage provided assurance that API behaviors remained consistent and stable throughout the transition.
Prompt Engineering Patterns & LLM Integration
Another highlight of this period was deep involvement with LLM prompt engineering and integrating large language models into our workflow. Fiducia's platform uses LLMs behind the scenes to generate contextual content for activations. For example, we would prompt it to describe a player's background or explaining a detected plant disease. I learned that getting quality output from these models requires careful prompt design and context management.
One pattern we adopted was prompt simplification. Early on, some of our prompts for the Cal WBB demo were too verbose, leading to inconsistent results. We switched to a strategy of one prompt = one clear task. In the jersey recognition case, the image analysis prompt became a succinct instruction focusing the model on two things: identifying jersey numbers and explaining the scene. We found this yielded far more accurate and relevant answers, confirming the adage that "single concise instructions often outperform complex prompts".
Context file tuning was the other side of the equation. Rather than hard-coding lots of facts into the prompt, we maintained an external knowledge file (for the sports activation, a text file listing all players, their numbers, and key stats). Our system uses a form of retrieval-augmented generation (RAG): it can pull in relevant snippets from this file (or from a vector database) to ground the LLM's response in factual data. In practice, this meant I spent time curating the content of that file to ensure it had exactly the information the model needed (and nothing extraneous that might confuse it or cause hallucination).
This tuning was critical. With a well-structured context, the model could accurately map a jersey number to a player name and even include that player's recent performance or a sponsor mention in the generated commentary. It was a great introduction to RAG architecture for me: I saw how feeding an LLM some retrieved context allows it to provide specific answers while still maintaining natural language fluency.
We also explored multiple LLM options (disclosed for confidentiality) to see which best fit our needs. We compared them on response quality and speed. For instance, one was evaluated for its longer context window and stable formatting, while other models were tested for faster local inference. Though we didn't do any complex multi-model chaining in these weeks (our use case was straightforward Q&A generation, so a single call sufficed), this exercise taught me about each model's strengths.
It also underlined the importance of guardrails. We kept responses concise to avoid high token costs, and we monitored that no model output unwanted content thanks to prompt guidelines and safety filters. This careful model and prompt selection ensured the AI outputs remained accurate and on-brand for the activation.
Leading a New Activation: Fungal Disease Detection
Perhaps the most exciting part of Week 3 was taking initiative to lead a brand-new activation project. With the sports demo wrapped up, I pitched an idea (endorsed by our supervisor) to build an AI-powered vineyard fungal detection tool, essentially an educational AR app for grape farmers to identify and learn about common vine diseases. Management green-lit this "Fungal Detection" activation and put me at the helm. It was a bit daunting to step up as an intern, but also thrilling to apply our platform to a completely new domain.
My first task was drafting a requirements document for the feature. This spec outlined the problem (grapevine fungal infections in vineyards), the target users (vineyard owners or agricultural partners), and how our activation would work: users snap a picture of a grape leaf, the system analyzes it for signs of infection, and returns an AR overlay highlighting the disease and suggested actions. I detailed the MVP scope, focusing initially on one disease in a controlled setting ("black rot" fungus on Napa Valley Cabernet grapes, for example), with an eye on future expansion to more diseases and even drone imagery analysis. This narrow-first approach was a lesson from our supervisor/mentor to avoid scope creep and ensure we deliver value before scaling up.
Technically, designing the fungal activation drew on everything we learned so far. We planned to mirror the same capture-to-inference pipeline from the basketball activation. The backend would again use a RAG approach: for instance, retrieving from a vector database of plant pathology information to supplement the LLM's explanation of the diagnosis. (One of Fiducia's strengths is that its core RAG + LLM architecture can be repurposed across domains easily, which this project would validate.) On the front end, the AR overlay would draw a highlight around the infected area of the leaf and display text or audio guidance with access to multiple languages scaling it globally.
Leading this effort meant not only defining the tech, but also coordinating the team. I broke the project into functional groups similar to our earlier split: one group would handle the prompt configurations, another would focus on the AR UI/UX, and a third on the knowledgebase (assembling the info on diseases for the vector store). We scheduled brainstorming sessions and I made sure to gather feedback from all interns so that everyone bought into the plan (intern unanimity was actually encouraged as a governance step before seeking senior approval). By the end of Week 3, we had a solid design and were gearing up to start building in Week 4. For me, it was a proud moment to have gone from learning the ropes to leading a project, reinforcing that at a startup, initiative and technical skills can quickly translate into real responsibility.
Challenges & Lessons Learned
These two weeks were intense and came with a fair share of challenges. Each hurdle, however, was a learning opportunity that helped me grow as an engineer:
- Balancing Speed with Quality: In a startup environment, we moved fast, like shipping a demo in days, but I learned that speed means little without quality. I faced the challenge of integrating AI-generated code quickly while not skipping enterprise guardrails. For example, I had to ensure every new feature had proper logging and passed security scans, and that our test coverage stayed high. This taught me to never treat testing or code review as an afterthought, no matter how tight the timeline.
- Learning New Tools Under Pressure: Adopting Cursor IDE and other new tools on the fly was initially overwhelming. Early on, I over-relied on the AI suggestions and sometimes got output that didn't fit our use-case. Through trial and error, I learned to guide the tool with better prompts and to use it for what it's best at (boilerplate, refactoring), while I focused on the critical logic. The lesson here was AI tools can boost productivity, but human oversight and strong fundamentals are non-negotiable.
- Prompt Engineering is an Art: Crafting prompts and context for LLMs was tricky. Just a small wording change could produce vastly different results. We encountered issues with the model sometimes ignoring parts of our prompt or getting confused by irrelevant context. Through these struggles I learned the value of prompt clarity and minimalism. Keeping instructions simple and context highly relevant led to more consistent outputs. I also discovered the importance of resetting state between runs. For instance, clearing caches to avoid stale responses when testing new prompts.
- Requirement Ambiguity: At one point, we realized some features weren't well defined ("What exactly should the AI agent tell a user about a fungus?" etc.). Instead of guessing and potentially building the wrong thing, I paused to clarify these requirements with mentors. I learned to treat requirements like a contract. When something was unclear, I'd document questions and get answers before designing. This upfront communication saved us from a lot of rework, and it's a habit I'll carry forward.
- Teamwork and Leadership: Working with a cohort of fellow interns, I saw firsthand how coordination and clear communication impact a project. We had a challenge where two sub-teams implemented conflicting changes to the activation config. After resolving it, we instituted daily mini stand-ups among ourselves to sync changes. When I took on leading the fungal project, I put extra effort into getting everyone's input early and establishing consensus on the plan. The experience taught me that even in a highly technical project, soft skills like alignment and knowledge sharing are crucial. A cohesive team produces better results.
Takeaways
Reflecting on Weeks 2–3, I'm amazed by how much was packed into this period. Here are my key takeaways from the experience:
- Full-Stack Exposure: I got to work across the stack, from backend Spring Boot services and API tests to front-end AR interfaces and 3D models. This end-to-end view reinforced how different pieces must come together for a successful product.
- AI in Practice: Integrating LLMs and computer vision into a real product is very different from toy examples. I learned practical techniques in prompt engineering, context management with RAG, and model selection trade-offs (speed vs. accuracy). It demystified a lot of AI "magic" and turned it into an engineering tool in my toolbox.
- Quality Matters (Especially in Startups): Working in a fast-paced startup setting, I expected a "move fast and break things" vibe. Instead, I learned that moving fast and not breaking things is the real goal. Writing tests, adding logs, and monitoring performance aren't chores, but actually they're what enable rapid innovation by catching issues early and building trust in the system.
- Leadership Can Come Early: I never imagined I'd be leading a project in my third week. But given the opportunity, I realized that stepping up is the fastest way to grow. By taking ownership of the fungal detection activation, I had to quickly fill in knowledge gaps and earn the team's confidence. It was challenging, but it affirmed that leadership isn't about title, it's about mindset and action.
Closing Thoughts
Weeks 2 and 3 at Fiducia AI were both intense and rewarding. I evolved from simply following along to actively contributing, and even guiding, cutting-edge AI projects. The blend of AR innovation, LLM engineering, and good ol' software craftsmanship made for an experience that pushed me beyond my comfort zone. As I head into Week 4, I'm excited to build out the Fungal Detection activation and eventually contribute to an AI assistant for our platform's FAQs. If these past weeks are any indication, there's a lot more to learn and achieve, and I'm all in for it. Stay tuned for more insights as this internship journey continues!