chuckfinca Claude Opus 4.6 (1M context) commited on
Commit
e5d37ab
·
1 Parent(s): ef86a99

Add website content pages to workspace, pin harness 25e7e15

Browse files

Copy raw HTML templates into workspace/website/ for the model
to reference. No transformation — the model reads HTML as-is.
Updated harness handles .html extensions and subdirectory lookup.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

requirements.txt CHANGED
@@ -1,6 +1,6 @@
1
  click>=8.1
2
  litellm @ git+https://github.com/BerriAI/litellm.git
3
- a-simple-llm-harness @ git+https://github.com/chuckfinca/a-simple-llm-harness.git@6327854
4
  e2b-code-interpreter>=2.5
5
  huggingface-hub
6
  python-dotenv
 
1
  click>=8.1
2
  litellm @ git+https://github.com/BerriAI/litellm.git
3
+ a-simple-llm-harness @ git+https://github.com/chuckfinca/a-simple-llm-harness.git@25e7e15
4
  e2b-code-interpreter>=2.5
5
  huggingface-hub
6
  python-dotenv
workspace/website/a-simple-auth-kit.html ADDED
@@ -0,0 +1,267 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}ASimpleAuthKit Case Study - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {% block content %}
6
+ <div class="back-navigation">
7
+ <a href="/portfolio" class="back-link">
8
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="back-arrow">
9
+ <path d="M19 12H5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
10
+ <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
11
+ </svg>
12
+ <span>Back to Portfolio</span>
13
+ </a>
14
+ </div>
15
+
16
+ <!-- Case Study Header -->
17
+ <div class="case-study-header">
18
+ <h1 class="page-title mb-md">Case Study: ASimpleAuthKit</h1>
19
+
20
+ <!-- Title and description at the top -->
21
+ <div class="app-description">
22
+ <h2 class="app-title mb-sm">Production-Ready iOS Authentication Library</h2>
23
+ <p class="page-intro">A comprehensive Swift Package that simplifies Firebase Authentication integration for iOS apps, providing SwiftUI-friendly APIs, biometric authentication, account linking, and enterprise-grade security features.</p>
24
+ </div>
25
+
26
+ <!-- Package/Library Icon and Metadata -->
27
+ <div class="metadata-container">
28
+ <!-- Library icon -->
29
+ <div class="app-icon-container">
30
+ <div class="placeholder-icon" style="font-size: 1.5rem; font-weight: 600; background-color: var(--primary-light); color: var(--primary);">Auth</div>
31
+ </div>
32
+
33
+ <!-- Compact metadata grid -->
34
+ <div class="project-metadata-grid">
35
+ <div class="metadata-column">
36
+ <div class="metadata-label">Project Type:</div>
37
+ <div class="metadata-value">iOS Framework / Swift Package</div>
38
+ </div>
39
+ <div class="metadata-column">
40
+ <div class="metadata-label">Platform:</div>
41
+ <div class="metadata-value">iOS 16.0+</div>
42
+ </div>
43
+ <div class="metadata-column">
44
+ <div class="metadata-label">Technology Stack:</div>
45
+ <div class="metadata-value">Swift, Firebase SDK, SwiftUI</div>
46
+ </div>
47
+ <div class="metadata-column">
48
+ <div class="metadata-label">Timeline:</div>
49
+ <div class="metadata-value">1 month (iterative development)</div>
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </div>
54
+
55
+ <!-- The Challenge -->
56
+ <div class="process-step">
57
+ <div class="process-step-content">
58
+ <div class="process-step-header">
59
+ <div class="expertise-icon-container">
60
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"></path><line x1="12" y1="17" x2="12.01" y2="17"></line></svg>
61
+ </div>
62
+ <h3>The Challenge</h3>
63
+ </div>
64
+ <div class="process-step-content-body">
65
+ <p>Firebase Authentication is powerful but was designed in an era before SwiftUI and modern Swift concurrency. This creates a significant architectural mismatch for modern iOS apps. After building several applications with it, I repeatedly encountered the same pain points:</p>
66
+
67
+ <ul class="service-list">
68
+ <li><strong>Architectural Mismatch with SwiftUI</strong>: Firebase's imperative, singleton-based APIs are fundamentally incompatible with SwiftUI's declarative, state-driven nature. This forces developers to write complex, bug-prone bridging code.</li>
69
+ <li><strong>"Callback Hell"</strong>: The SDK relies heavily on nested completion handlers (callbacks), which are difficult to reason about and lead to unmaintainable code, a problem that modern <code>async/await</code> is designed to solve.</li>
70
+ <li><strong>Account Linking Complexity</strong>: The multi-step account linking flow is managed through callbacks and global state, making it extremely difficult to represent cleanly in a SwiftUI view hierarchy.</li>
71
+ <li><strong>Untestable by Design</strong>: The heavy use of global singletons (<code>Auth.auth()</code>) makes the SDK nearly impossible to mock, preventing isolated and reliable unit testing of an app's authentication logic.</li>
72
+ <li><strong>Generic Error UX</strong>: Firebase returns cryptic error codes (e.g., <code>invalid-credential</code>) that confuse users instead of guiding them toward a solution.</li>
73
+ </ul>
74
+
75
+ <p>The goal was to create a modern <strong>adapter</strong> or <strong>bridge</strong>—a reusable library that translates Firebase's difficult APIs into a system that feels truly native to SwiftUI and Swift Concurrency.</p>
76
+ </div>
77
+ </div>
78
+ </div>
79
+
80
+ <!-- My Approach -->
81
+ <div class="process-step">
82
+ <div class="process-step-content">
83
+ <div class="process-step-header">
84
+ <div class="expertise-icon-container">
85
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon></svg>
86
+ </div>
87
+ <h3>My Approach</h3>
88
+ </div>
89
+ <div class="process-step-content-body">
90
+ <p>I designed ASimpleAuthKit to act as a sophisticated <strong>bridge between two worlds</strong>: the imperative Firebase SDK and the declarative SwiftUI framework. The approach was centered on developer experience, production readiness, and comprehensive testability.</p>
91
+
92
+ <h4 class="mt-md mb-sm">Architecture Strategy:</h4>
93
+ <ul class="service-list">
94
+ <li><strong>The SwiftUI Bridge</strong>: The library's primary role is to serve as an adapter. It consumes Firebase's complex, callback-based operations and exposes them through a clean, state-driven <code>ObservableObject</code>, which is the cornerstone of state management in SwiftUI.</li>
95
+ <li><strong>State-Driven by Default</strong>: Instead of forcing developers to track scattered boolean flags (<code>isAuthenticating</code>, <code>isSignedIn</code>, <code>showError</code>), the library models everything as a single, comprehensive <code>AuthState</code> enum. This allows the entire UI to be driven by a simple <code>switch</code> statement.</li>
96
+ <li><strong>Protocol-Oriented Decoupling</strong>: Used dependency injection and protocols (<code>FirebaseAuthClientProtocol</code>, etc.) to completely isolate the core logic from Firebase singletons. This was the key to making the system 100% testable.</li>
97
+ <li><strong>Modern Concurrency Transformation</strong>: Aggressively wrapped all of Firebase's legacy completion handlers in modern <code>async/await</code> functions. This eliminates callback hell, simplifies error handling, and makes the asynchronous code vastly more readable and maintainable.</li>
98
+ </ul>
99
+
100
+ <h4 class="mt-md mb-sm">Production Features:</h4>
101
+ <ul class="service-list">
102
+ <li><strong>Biometric Authentication</strong>: Complete Face ID/Touch ID implementation with secure keychain storage.</li>
103
+ <li><strong>Account Linking Automation</strong>: Handles complex Firebase account linking flows transparently.</li>
104
+ <li><strong>Keychain Access Groups</strong>: Support for sharing authentication state between multiple apps.</li>
105
+ <li><strong>User-Centric Error Handling</strong>: Translates cryptic Firebase codes into helpful, actionable messages for end-users.</li>
106
+ </ul>
107
+ </div>
108
+ </div>
109
+ </div>
110
+
111
+ <!-- Technical Implementation -->
112
+ <div class="process-step">
113
+ <div class="process-step-content">
114
+ <div class="process-step-header">
115
+ <div class="expertise-icon-container">
116
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>
117
+ </div>
118
+ <h3>Technical Implementation</h3>
119
+ </div>
120
+ <div class="process-step-content-body">
121
+ <p>The library's architecture balances simplicity for the consumer with sophisticated internal functionality. The core is the <code>AuthService</code>, which manages a state machine driven by the <code>AuthState</code> enum.</p>
122
+
123
+ <h4 class="mt-md mb-sm">The State Machine Core:</h4>
124
+ <p>By defining every possible state, UI development becomes a simple matter of responding to the current state, which is published automatically.</p>
125
+ <pre style="background-color: var(--neutral-50); padding: var(--space-sm); border-radius: var(--radius-sm); font-size: 0.85rem; overflow-x: auto;">
126
+ public enum AuthState: Equatable, Sendable {
127
+ case signedOut
128
+ case authenticating(String?)
129
+ case signedIn(AuthUser)
130
+ case requiresBiometrics
131
+ case requiresAccountLinking(email: String, attemptedProviderId: String?)
132
+ case emailInUseSuggestSignIn(email: String)
133
+ case requiresMergeConflictResolution
134
+ }</pre>
135
+
136
+ <h4 class="mt-md mb-sm">Automated Account Linking:</h4>
137
+ <p>This flow is one of the most complex parts of Firebase Auth, and the library fully automates it:</p>
138
+ <ul class="service-list">
139
+ <li>When a sign-in fails with <code>account-exists-with-different-credential</code>, the library catches the error and stores the pending credential.</li>
140
+ <li>It transitions the state to <code>.requiresAccountLinking</code>, providing the UI with the necessary context (email and provider).</li>
141
+ <li>The app's UI prompts the user to sign in with their existing method (e.g., Google).</li>
142
+ <li>Upon successful re-authentication, <code>AuthService</code> automatically retrieves the stored credential and calls Firebase's <code>link(with:)</code> function.</li>
143
+ <li>The final state is <code>.signedIn</code>, with the user's account now linked to both providers, all handled transparently.</li>
144
+ </ul>
145
+
146
+ <h4 class="mt-md mb-sm">Secure Biometric Authentication:</h4>
147
+ <ul class="service-list">
148
+ <li><strong><code>BiometricController</code></strong>: A dedicated controller that manages user preferences for biometrics.</li>
149
+ <li><strong><code>SecureStorageProtocol</code></strong>: An abstraction over <code>KeychainStorage</code> that securely stores the last authenticated user's ID, associating the biometric preference with a specific account on the device.</li>
150
+ <li><strong>Client-Controlled Policy</strong>: The library provides the <em>capability</em> but lets the consuming app decide <em>when</em> to require biometrics (e.g., on app launch), giving developers full control over the user experience.</li>
151
+ </ul>
152
+
153
+ <h4 class="mt-md mb-sm">Test-Driven Architecture:</h4>
154
+ <ul class="service-list">
155
+ <li><strong><code>MockFirebaseAuthenticator</code> & <code>MockFirebaseAuthClient</code></strong>: Complete mock implementations of all Firebase-interacting protocols.</li>
156
+ <li><strong>Behavioral Simulation</strong>: Mocks can be configured to return specific users or errors, allowing for testing of every path, including complex ones like account linking and merge conflicts.</li>
157
+ <li><strong>State Transition Verification</strong>: Tests (<code>AuthServiceTests.swift</code>) verify every state transition, ensuring the UI will always behave predictably. For example, <code>testCreateAccountWithEmail_Failure_EmailAlreadyInUse_setsStateToEmailInUseSuggestSignIn</code>.</li>
158
+ </ul>
159
+ </div>
160
+ </div>
161
+ </div>
162
+
163
+ <!-- Results & Impact -->
164
+ <div class="process-step">
165
+ <div class="process-step-content">
166
+ <div class="process-step-header">
167
+ <div class="expertise-icon-container">
168
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path><polyline points="22 4 12 14.01 9 11.01"></polyline></svg>
169
+ </div>
170
+ <h3>Results & Impact</h3>
171
+ </div>
172
+ <div class="process-step-content-body">
173
+ <p>ASimpleAuthKit successfully transforms Firebase authentication from a major integration hurdle into a streamlined, plug-and-play experience.</p>
174
+
175
+ <!-- Key Metrics -->
176
+ <div class="about-stats mt-md">
177
+ <div class="stat-item">
178
+ <div class="stat-number">95%+</div>
179
+ <div class="stat-label">Test Coverage</div>
180
+ </div>
181
+ <div class="stat-item">
182
+ <div class="stat-number">2-3 Weeks</div>
183
+ <div class="stat-label">Avg. Dev Time Saved Per Project</div>
184
+ </div>
185
+ <div class="stat-item">
186
+ <div class="stat-number">7</div>
187
+ <div class="stat-label">Critical Auth States Managed</div>
188
+ </div>
189
+ </div>
190
+
191
+ <p class="mt-md">The library's impact is significant:</p>
192
+ <ul class="service-list">
193
+ <li><strong>Drastically Simplified Integration</strong>: Reduced Firebase auth setup from weeks of complex, error-prone work to just a few hours of configuration.</li>
194
+ <li><strong>Enhanced Security</strong>: Provides a robust biometric authentication layer with secure keychain management, a feature not offered natively by Firebase.</li>
195
+ <li><strong>Superior User Experience</strong>: Replaces confusing technical errors with clear, actionable guidance, reducing user frustration and support requests.</li>
196
+ <li><strong>Unprecedented Reliability</strong>: The protocol-based architecture and comprehensive test suite ensure robust, predictable behavior across all authentication scenarios.</li>
197
+ <li><strong>Increased Developer Productivity</strong>: The SwiftUI-native API and automated complex flows allow developers to focus on building features, not authentication boilerplate.</li>
198
+ </ul>
199
+
200
+ <div class="testimonial">
201
+ <div class="testimonial-content">The decision to extract authentication logic into this reusable library has paid dividends. What once required weeks of careful Firebase integration now takes an afternoon to implement, with better security and a more polished user experience than our previous custom implementations.</div>
202
+ <div class="testimonial-author">— Internal Project Assessment</div>
203
+ </div>
204
+ </div>
205
+ </div>
206
+ </div>
207
+
208
+ <!-- Usage Example -->
209
+ <div class="process-step">
210
+ <div class="process-step-content">
211
+ <div class="process-step-header">
212
+ <div class="expertise-icon-container">
213
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10"></circle><line x1="12" y1="8" x2="12" y2="12"></line><line x1="12" y1="16" x2="12.01" y2="16"></line></svg>
214
+ </div>
215
+ <h3>Usage Example</h3>
216
+ </div>
217
+ <div class="process-step-content-body">
218
+ <p>The result of this architecture is code that is clean, declarative, and idiomatic to SwiftUI. ASimpleAuthKit completely hides the underlying complexity, boilerplate, and architectural mismatch of the Firebase SDK.</p>
219
+
220
+ <h4 class="mt-md mb-sm">Declarative UI Driven by State:</h4>
221
+ <pre style="background-color: var(--neutral-50); padding: var(--space-md); border-radius: var(--radius-sm); font-size: 0.8rem; overflow-x: auto;">
222
+ // The 'authService' object handles all the complex Firebase logic internally.
223
+ // The view only needs to react to its simple '.state' property.
224
+
225
+ struct LoginView: View {
226
+ @StateObject private var authService = AuthService(config: AuthConfig())
227
+
228
+ var body: some View {
229
+ switch authService.state {
230
+ case .signedOut:
231
+ // Show the login form
232
+ loginForm
233
+ case .authenticating(let message):
234
+ // Show a loading indicator
235
+ ProgressView(message ?? "Authenticating...")
236
+ case .signedIn(let user):
237
+ // Show the main app content
238
+ Text("Welcome, \(user.displayName ?? "User")!")
239
+ case .requiresAccountLinking(let email, _):
240
+ // Show a dedicated UI to handle linking
241
+ accountLinkingPrompt(email: email)
242
+ // ... other states
243
+ }
244
+ }
245
+ // ... (form implementation)
246
+ }</pre>
247
+ </div>
248
+ </div>
249
+ </div>
250
+
251
+
252
+ <!-- GitHub Link -->
253
+ <div class="index-cta mt-xl">
254
+ <h3 class="mb-sm">Explore the Implementation</h3>
255
+ <p class="mb-md">ASimpleAuthKit is a powerful example of how thoughtful architecture can solve complex, recurring problems in mobile development.</p>
256
+ <a href="https://github.com/chuckfinca/ASimpleAuthKit" class="cta-button" target="_blank" rel="noopener">
257
+ View Project on GitHub
258
+ </a>
259
+ </div>
260
+
261
+ <!-- CTA for services -->
262
+ <div class="process-cta">
263
+ <h3>Need a robust, secure mobile application?</h3>
264
+ <p>My experience building production-grade systems like ASimpleAuthKit enables me to architect and implement secure, user-friendly, and highly testable mobile applications. Whether you need sophisticated Firebase integration, custom security flows, or a scalable app architecture, I can build a solution that prioritizes quality and long-term maintainability.</p>
265
+ <a href="/contact" class="process-cta-button">Discuss Your Project</a>
266
+ </div>
267
+ {% endblock %}
workspace/website/about.html ADDED
@@ -0,0 +1,165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}About - About Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {% block extra_css %}
6
+ <link rel="stylesheet" href="/assets/css/pages/about.css" />
7
+ {% endblock %}
8
+
9
+ {% block content %}
10
+ <!-- About Section -->
11
+ <h1 class="page-title">About</h1>
12
+
13
+ <!-- Image and Intro Container -->
14
+ <div class="about-intro-container">
15
+ <div class="about-personal-photo-container">
16
+ <img src="/assets/images/charles.jpeg" alt="Charles Feinn" class="about-personal-photo">
17
+ </div>
18
+ <div class="about-intro-text">
19
+ <p class="page-intro">Hi, I'm Charles Feinn, the engineer behind AppSimple. I specialize in building practical AI solutions and user-focused mobile applications.</p>
20
+ </div>
21
+ </div>
22
+
23
+ <!-- My Journey -->
24
+ <h2 class="section-heading">My Path to Practical AI</h2>
25
+ <p>My route to combining mobile development and applied AI wasn't conventional, but it was driven by a consistent theme: a fascination with how complex systems connect, interact, and learn. This started early, leading me to co-found a music technology company focused on online collaboration back in the MySpace era – essentially, a social network with embedded audio editing tools.</p>
26
+
27
+ <p>When the iPhone arrived, I saw the next evolution of connection and interaction. I dove headfirst into mobile, teaching myself Objective-C and dedicating years to building native applications. This period wasn't just about coding; it was an intense education in creating technology that was intuitive, reliable, and genuinely solved problems for users. It ingrained a discipline of practical, user-centered implementation.</p>
28
+
29
+ <p>Yet, that underlying fascination with learning systems never waned. As AI and Machine Learning matured, I recognized it as the culmination of my interests – a powerful way to build systems that could truly adapt and learn. It felt like the missing piece I'd been searching for since my earliest explorations into network dynamics.</p>
30
+
31
+ <p>Today, AppSimple exists at the intersection of these experiences. I bring the practical discipline of building polished mobile applications to the potential of applied AI. My goal isn't just to implement the latest AI techniques, but to do so in a way that's grounded, effective, and delivers tangible value – informed by years of making technology work in the real world.</p>
32
+
33
+ <!-- Expertise Stats Section -->
34
+ <h2 class="section-heading">Experience Highlights</h2>
35
+
36
+ <div class="about-stats">
37
+ <div class="stat-item">
38
+ <div class="stat-number">11+</div>
39
+ <div class="stat-label">Years of Mobile Development</div>
40
+ </div>
41
+
42
+ <div class="stat-item">
43
+ <div class="stat-number">1.3M+</div>
44
+ <div class="stat-label">App Installations</div>
45
+ </div>
46
+
47
+ <div class="stat-item">
48
+ <div class="stat-number">3+</div>
49
+ <div class="stat-label">Years of AI Focus & Development</div>
50
+ </div>
51
+ </div>
52
+
53
+ <!-- My Approach Section with Lucide Icons -->
54
+ <h2 class="section-heading">My Approach</h2>
55
+ <p class="section-intro">I believe in the power of technology to solve real business problems, but I'm also pragmatic about its limitations. My approach is built on three core principles that apply equally to mobile development and applied AI:</p>
56
+
57
+ <div class="expertise-item">
58
+ <div class="expertise-icon-container">
59
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet">
60
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
61
+ <polyline points="22 4 12 14.01 9 11.01"></polyline>
62
+ </svg>
63
+ </div>
64
+ <div class="expertise-content">
65
+ <h3>Practicality First</h3>
66
+ <p>I focus on solutions that deliver tangible results, not theoretical possibilities. Every implementation is designed to solve specific business problems efficiently, whether it's a mobile app or AI system.</p>
67
+ </div>
68
+ </div>
69
+
70
+ <div class="expertise-item">
71
+ <div class="expertise-icon-container">
72
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet">
73
+ <circle cx="12" cy="12" r="10"></circle>
74
+ <line x1="12" y1="16" x2="12" y2="12"></line>
75
+ <line x1="12" y1="8" x2="12.01" y2="8"></line>
76
+ </svg>
77
+ </div>
78
+ <div class="expertise-content">
79
+ <h3>Clear Communication</h3>
80
+ <p>I translate complex technical concepts into plain language, ensuring you always understand what's possible, what's not, and why certain approaches are recommended. This is especially important when working with emerging AI technologies.</p>
81
+ </div>
82
+ </div>
83
+
84
+ <div class="expertise-item">
85
+ <div class="expertise-icon-container">
86
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
87
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
88
+ <circle cx="9" cy="7" r="4"/>
89
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"/>
90
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"/>
91
+ </svg>
92
+ </div>
93
+ <div class="expertise-content">
94
+ <h3>Long-term Partnership</h3>
95
+ <p>I don't just deliver and disappear. My goal is to build a lasting relationship where I can continue to support your technology journey as your needs evolve and new capabilities become available.</p>
96
+ </div>
97
+ </div>
98
+
99
+ <!-- Expertise Section with Lucide Icons -->
100
+ <h2 class="section-heading">Technical Expertise</h2>
101
+ <p class="section-intro">My technical background spans several key areas:</p>
102
+
103
+ <div class="expertise-item">
104
+ <div class="expertise-icon-container">
105
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
106
+ <rect x="5" y="2" width="14" height="20" rx="2" ry="2"/>
107
+ <line x1="12" y1="18" x2="12.01" y2="18"/>
108
+ </svg>
109
+ </div>
110
+ <div class="expertise-content">
111
+ <h3>Mobile Development</h3>
112
+ <p>Native iOS and Android development, cross-platform solutions, user experience design, and integrating mobile applications with business systems.</p>
113
+ </div>
114
+ </div>
115
+
116
+ <div class="expertise-item">
117
+ <div class="expertise-icon-container">
118
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
119
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
120
+ <path d="m2 12 3.76-3.76a1 1 0 0 1 1.41 0L12 13.17l4.83-4.83a1 1 0 0 1 1.41 0L22 12"/>
121
+ </svg>
122
+ </div>
123
+ <div class="expertise-content">
124
+ <h3>Machine Learning & AI</h3>
125
+ <p>LLM evaluation frameworks, prompt engineering, custom ML pipelines, AI integration strategies, and intelligent document processing systems.</p>
126
+ </div>
127
+ </div>
128
+
129
+ <div class="expertise-item">
130
+ <div class="expertise-icon-container">
131
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
132
+ <path d="M5 22h14"/>
133
+ <path d="M5 2h14"/>
134
+ <path d="M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22"/>
135
+ <path d="M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2"/>
136
+ </svg>
137
+ </div>
138
+ <div class="expertise-content">
139
+ <h3>Workflow Automation</h3>
140
+ <p>Design and implementation of automated processes that reduce manual effort and increase accuracy using AI tools and mobile solutions.</p>
141
+ </div>
142
+ </div>
143
+
144
+ <div class="expertise-item">
145
+ <div class="expertise-icon-container">
146
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
147
+ <rect x="3" y="3" width="18" height="18" rx="2" ry="2"/>
148
+ <line x1="12" y1="8" x2="12" y2="16"/>
149
+ <line x1="8" y1="12" x2="16" y2="12"/>
150
+ </svg>
151
+ </div>
152
+ <div class="expertise-content">
153
+ <h3>Hybrid Solutions</h3>
154
+ <p>Creating systems that combine mobile interfaces with AI backends, integrating on-device AI features with mobile UX, and developing cross-platform hybrid applications.</p>
155
+ </div>
156
+ </div>
157
+
158
+ <!-- CTA Section -->
159
+ <div class="process-cta">
160
+ <h3>Let's work together</h3>
161
+ <p>Whether you need a mobile application, an AI-powered solution, or a solution that combines both technologies, I'm here to help bring your vision to life with practical, user-focused technology.</p>
162
+ <a href="/contact" class="process-cta-button">Get in Touch</a>
163
+ </div>
164
+ </div>
165
+ {% endblock %}
workspace/website/bodhimind.html ADDED
@@ -0,0 +1,313 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}Bodhi Mind Case Study - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {# No extra_css needed as case-study styles should be in main.css #}
6
+
7
+ {% block content %}
8
+ <div class="back-navigation">
9
+ <a href="/portfolio" class="back-link">
10
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="back-arrow">
11
+ <path d="M19 12H5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
12
+ <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
13
+ </svg>
14
+ <span>Back to Portfolio</span>
15
+ </a>
16
+ </div>
17
+ <!-- Case Study Header with compact metadata -->
18
+ <div class="case-study-header">
19
+ <h1 class="page-title mb-md">Case Study: Bodhi Mind</h1> {# Use h1 for main page title #}
20
+
21
+ <!-- Title and description at the top -->
22
+ <div class="app-description">
23
+ <h2 class="app-title mb-sm">Meditation Content Platform</h2> {# Use h2 for subtitle #}
24
+ <p class="page-intro">Developing a subscription-based mobile app with intelligent content organization for a renowned meditation teacher.</p> {# Use page-intro class #}
25
+ </div>
26
+
27
+ <!-- App icon and compact metadata grid in a row -->
28
+ <div class="metadata-container">
29
+ <!-- App icon on the left -->
30
+ <div class="app-icon-container">
31
+ {# *** UPDATED IMAGE PATH *** #}
32
+ <img src="/assets/images/bodhiMind.png" alt="Bodhi Mind Icon" class="app-icon">
33
+ </div>
34
+
35
+ <!-- Compact metadata grid to the right -->
36
+ <div class="project-metadata-grid">
37
+ <div class="metadata-column">
38
+ <div class="metadata-label">Client:</div>
39
+ <div class="metadata-value">Bodhipaksa (meditation teacher)</div>
40
+ </div>
41
+ <div class="metadata-column">
42
+ <div class="metadata-label">Platform:</div>
43
+ <div class="metadata-value">iOS</div>
44
+ </div>
45
+ <div class="metadata-column">
46
+ <div class="metadata-label">Timeline:</div>
47
+ <div class="metadata-value">4 months</div>
48
+ </div>
49
+ <div class="metadata-column">
50
+ <div class="metadata-label">Role:</div>
51
+ <div class="metadata-value">Lead Developer</div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <!-- App Screenshots -->
58
+ <div class="mb-lg">
59
+ <h3 class="section-heading mb-md">Project Results</h3> {# Use section-heading class #}
60
+ <div class="screenshots-grid">
61
+ {# *** UPDATED IMAGE PATHS *** #}
62
+ <img src="/assets/images/iPhone_BM_1.png" alt="Bodhi Mind screenshot" class="app-screenshot">
63
+ <img src="/assets/images/iPhone_BM_2.png" alt="Bodhi Mind screenshot" class="app-screenshot">
64
+ <img src="/assets/images/iPhone_BM_3.png" alt="Bodhi Mind screenshot" class="app-screenshot">
65
+ <img src="/assets/images/iPhone_BM_4.png" alt="Bodhi Mind screenshot" class="app-screenshot">
66
+ </div>
67
+ </div>
68
+
69
+ <!-- The Challenge -->
70
+ <div class="process-step">
71
+ <div class="process-step-content">
72
+ <div class="process-step-header">
73
+ <div class="expertise-icon-container">
74
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
75
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
76
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
77
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
78
+ </svg>
79
+ </div>
80
+ <h3>The Challenge</h3>
81
+ </div>
82
+ <div class="process-step-content-body">
83
+ <p>Bodhipaksa, an established meditation teacher with over 200 recorded guided meditations, needed a way to make his extensive content library accessible to students worldwide. The existing solution—manually emailing MP3 files to customers—was inefficient and provided a poor user experience. The client faced several challenges:</p>
84
+ <ul class="service-list">
85
+ <li>Content organization: Hundreds of meditation files needed to be categorized and made easily searchable</li>
86
+ <li>Discoverability: Users needed help finding the most relevant meditations for their specific needs</li>
87
+ <li>Monetization: A sustainable subscription model was needed to support ongoing content creation</li>
88
+ <li>User experience: Users needed a simple interface that wouldn't distract from meditation practice</li>
89
+ <li>Content management: The client needed an easy way to upload new content to the app</li>
90
+ </ul>
91
+ </div>
92
+ </div>
93
+ </div>
94
+
95
+ <!-- The Approach -->
96
+ <div class="process-step">
97
+ <div class="process-step-content">
98
+ <div class="process-step-header">
99
+ <div class="expertise-icon-container">
100
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
101
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
102
+ </svg>
103
+ </div>
104
+ <h3>My Approach</h3>
105
+ </div>
106
+ <div class="process-step-content-body">
107
+ <p>After thorough discovery sessions with the client, I developed a comprehensive strategy that would address all their needs while creating an exceptional user experience:</p>
108
+ <h4 class="mt-md mb-sm">Content Strategy:</h4>
109
+ <p>I implemented a multi-dimensional tagging system for all meditation content, allowing users to find meditations by:</p>
110
+ <ul class="service-list">
111
+ <li>Category (type of meditation content)</li>
112
+ <li>Duration (short sessions to extended practices)</li>
113
+ <li>Album & Course (related meditations in structured programs)</li>
114
+ <li>Series (ongoing meditation series)</li>
115
+ </ul>
116
+ <h4 class="mt-md mb-sm">Development Approach:</h4>
117
+ <p>I adopted a user-centered, iterative approach with regular client feedback sessions. This ensured I was building exactly what was needed while maintaining flexibility to adapt the implementation as I learned more.</p>
118
+ </div>
119
+ </div>
120
+ </div>
121
+
122
+ <!-- Technical Implementation -->
123
+ <div class="process-step">
124
+ <div class="process-step-content">
125
+ <div class="process-step-header">
126
+ <div class="expertise-icon-container">
127
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
128
+ <path d="M16 18l6-6-6-6"/>
129
+ <path d="M8 6l-6 6 6 6"/>
130
+ </svg>
131
+ </div>
132
+ <h3>Technical Implementation</h3>
133
+ </div>
134
+ <div class="process-step-content-body">
135
+ <p>To create a seamless experience for both users and the content creator, I developed a solution with several key components:</p>
136
+ <h4 class="mt-md mb-sm">iOS Native App:</h4>
137
+ <p>I built a native iOS application in Objective-C (this was right when Swift was coming out) that provides an intuitive interface for browsing and playing meditation content. The app includes:</p>
138
+ <ul class="service-list">
139
+ <li>Custom audio player with background play</li>
140
+ <li>Offline playback capabilities for downloaded content</li>
141
+ <li>List-view browsing options</li>
142
+ <li>Usage tracking</li>
143
+ <li>Favorites for easy content revisiting</li>
144
+ </ul>
145
+ <h4 class="mt-md mb-sm">Backend Infrastructure:</h4>
146
+ <p>I implemented a backend using Firebase to manage content, user data, and subscription management:</p>
147
+ <ul class="service-list">
148
+ <li>Firebase Realtime Database for application data</li>
149
+ <li>Firebase Storage for secure audio file storage</li>
150
+ <li>Firebase Analytics for basic usage insights</li>
151
+ </ul>
152
+ <h4 class="mt-md mb-sm">Content Management System:</h4>
153
+ <p>I set up a streamlined content management workflow using Google Sheets that allows the client to:</p>
154
+ <ul class="service-list">
155
+ <li>Upload new meditation recordings</li>
156
+ <li>Add and edit metadata and tags</li>
157
+ <li>Create curated meditation collections</li>
158
+ <li>View basic analytics on content popularity</li>
159
+ </ul>
160
+ <h4 class="mt-md mb-sm">Technologies Used:</h4>
161
+ <ul class="service-list">
162
+ <li>Objective-C and UIKit for iOS development</li>
163
+ <li>Firebase (Realtime Database, Storage, Analytics)</li>
164
+ <li>Apple StoreKit for subscription management</li>
165
+ <li>Google Sheets for content management</li>
166
+ </ul>
167
+ </div>
168
+ </div>
169
+ </div>
170
+
171
+ <!-- Results & Impact - UPDATED SECTION -->
172
+ <div class="process-step">
173
+ <div class="process-step-content">
174
+ <div class="process-step-header">
175
+ <div class="expertise-icon-container">
176
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
177
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
178
+ <polyline points="22 4 12 14.01 9 11.01"/>
179
+ </svg>
180
+ </div>
181
+ <h3>Results & Impact</h3>
182
+ </div>
183
+ <div class="process-step-content-body">
184
+ <p>The Bodhi Mind app launched successfully and has achieved significant user engagement:</p>
185
+ <!-- Key Metrics -->
186
+ <div class="about-stats mt-md">
187
+ <div class="stat-item">
188
+ <div class="stat-number">100K+</div>
189
+ <div class="stat-label">Total meditation sessions</div>
190
+ </div>
191
+ <div class="stat-item">
192
+ <div class="stat-number">13K+</div>
193
+ <div class="stat-label">First-time users</div>
194
+ </div>
195
+ <div class="stat-item">
196
+ <div class="stat-number">4.6</div>
197
+ <div class="stat-label">App Store rating</div>
198
+ </div>
199
+ </div>
200
+ <p class="mt-md">Key technical achievements included:</p>
201
+ <ul class="service-list">
202
+ <li><strong>Complex audio streaming</strong> with reliable playback across variable network conditions</li>
203
+ <li><strong>Efficient offline storage</strong> enabling users to download meditations for offline use</li>
204
+ <li><strong>Full product lifecycle management</strong> from initial design through App Store deployment</li>
205
+ </ul>
206
+ <p>For the content creator, the platform delivered substantial benefits:</p>
207
+ <ul class="service-list">
208
+ <li>Global digital distribution reaching thousands of new students</li>
209
+ <li>Significantly reduced content management overhead</li>
210
+ <li>Sustainable subscription revenue to support ongoing content creation</li>
211
+ </ul>
212
+ </div>
213
+ </div>
214
+ </div>
215
+
216
+ <!-- Key Learnings -->
217
+ <div class="process-step">
218
+ <div class="process-step-content">
219
+ <div class="process-step-header">
220
+ <div class="expertise-icon-container">
221
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
222
+ <path d="M18 8h1a4 4 0 0 1 0 8h-1"/>
223
+ <path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"/>
224
+ <line x1="6" y1="1" x2="6" y2="4"/>
225
+ <line x1="10" y1="1" x2="10" y2="4"/>
226
+ <line x1="14" y1="1" x2="14" y2="4"/>
227
+ </svg>
228
+ </div>
229
+ <h3>Key Learnings</h3>
230
+ </div>
231
+ <div class="process-step-content-body">
232
+ <p>This project reinforced several important principles about developing content platforms:</p>
233
+ <h4 class="mt-md mb-sm">Content Organization:</h4>
234
+ <p>Working with a large meditation library highlighted the importance of:</p>
235
+ <ul class="service-list">
236
+ <li>Developing a comprehensive taxonomy before implementing the tagging system</li>
237
+ <li>Creating multiple entry points to content (categories, collections)</li>
238
+ <li>Balancing discoverability with simplicity in the user interface</li>
239
+ </ul>
240
+ <h4 class="mt-md mb-sm">Technical Architecture:</h4>
241
+ <p>This project reinforced my approach to building content platforms:</p>
242
+ <ul class="service-list">
243
+ <li>Firebase provided a rapid development experience for mobile-focused projects</li>
244
+ <li>Investing in content metadata infrastructure pays dividends for discoverability</li>
245
+ <li>Simple content management workflows often outperform complex systems for individual creators</li>
246
+ </ul>
247
+ <p>These learnings have informed my approach to subsequent content platform projects, including how I structure content organization and management workflows.</p>
248
+ </div>
249
+ </div>
250
+ </div>
251
+
252
+ <!-- If I Were Building This Today Section -->
253
+ <div class="process-step">
254
+ <div class="process-step-content">
255
+ <div class="process-step-header">
256
+ <div class="expertise-icon-container">
257
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
258
+ <circle cx="12" cy="12" r="10"/>
259
+ <line x1="12" y1="8" x2="12" y2="12"/>
260
+ <line x1="12" y1="16" x2="12.01" y2="16"/>
261
+ </svg>
262
+ </div>
263
+ <h3>If I Were Building This Today</h3>
264
+ </div>
265
+ <div class="process-step-content-body">
266
+ <p>The Bodhi Mind project successfully addressed the client's needs with the technologies available at the time. If I were building a similar meditation platform today, I would incorporate several AI capabilities to significantly enhance both the user experience and content management:</p>
267
+ <h4 class="mt-md mb-sm">Content Enhancement:</h4>
268
+ <ul class="service-list">
269
+ <li><strong>Automated Transcriptions and Captioning</strong> - AI would generate accurate transcripts of all meditations, improving accessibility and enabling text search of spoken content</li>
270
+ <li><strong>Automated Content Tagging</strong> - NLP systems could analyze meditation audio to automatically tag and categorize content by themes, techniques, and tone</li>
271
+ <li><strong>Language Expansion</strong> - Using voice cloning technology to offer meditations in multiple languages while preserving the guide's voice characteristics</li>
272
+ <li><strong>Content Summarization</strong> - Generating concise descriptions of longer meditations to help users quickly find relevant content</li>
273
+ </ul>
274
+ <h4 class="mt-md mb-sm">Personalization:</h4>
275
+ <ul class="service-list">
276
+ <li><strong>Intelligent Recommendations</strong> - Machine learning algorithms could analyze usage patterns and feedback to suggest meditations tailored to individual needs</li>
277
+ <li><strong>Mood-Based Suggestions</strong> - Sentiment analysis could identify appropriate content based on optional user mood input</li>
278
+ <li><strong>Time-of-Day Optimization</strong> - Pattern recognition to identify when different types of meditations are most effective for each user</li>
279
+ <li><strong>Adaptive Session Lengths</strong> - Algorithmically determining optimal meditation durations for individual users</li>
280
+ </ul>
281
+ <h4 class="mt-md mb-sm">User Experience:</h4>
282
+ <ul class="service-list">
283
+ <li><strong>Voice-Controlled Navigation</strong> - Natural language processing for hands-free control, especially valuable during meditation</li>
284
+ <li><strong>Smart Notifications</strong> - Machine learning to determine optimal times for practice reminders based on user behavior</li>
285
+ <li><strong>Progress Insights</strong> - AI analysis of usage patterns to provide meaningful feedback on meditation progress</li>
286
+ <li><strong>Contextual Awareness</strong> - Using device sensors and calendar integration to suggest appropriate meditations for current situations</li>
287
+ </ul>
288
+ <p class="mt-md">These AI enhancements would transform a static content library into a dynamic, personalized meditation companion that adapts to each user's unique needs and practices. This represents the evolution I'm now bringing to new projects—combining strong content organization fundamentals with powerful AI capabilities to create more intelligent, responsive digital experiences.</p>
289
+ </div>
290
+ </div>
291
+ </div>
292
+
293
+ <!-- App Link -->
294
+ <div class="index-cta mt-xl">
295
+ <h3 class="mb-sm">See the project in action</h3>
296
+ <p class="mb-md">Download Bodhi Mind and experience the results firsthand.</p>
297
+ {# *** Correct App Store Link *** #}
298
+ <a href="http://itunes.apple.com/app/id1260761658?uo=5&at=1l3vcSo" class="cta-button">
299
+ Download on App Store
300
+ </a>
301
+ </div>
302
+
303
+ <!-- CTA for services -->
304
+ <div class="process-cta">
305
+ <h3>Need a content platform with advanced AI capabilities?</h3>
306
+ <p>My experience building content platforms like Bodhi Mind has shown me the immense potential for AI to transform these systems. Now I'm focused on implementing modern AI technologies to create even more intelligent, personalized content experiences. Let's discuss how I can help with your next project.</p>
307
+ <a href="/contact" class="process-cta-button">Get in Touch</a>
308
+ </div>
309
+ {% endblock %}
310
+
311
+ {% block extra_js %}
312
+ <!-- No page-specific JS needed for this case study -->
313
+ {% endblock %}
workspace/website/contact.html ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}Contact - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {% block extra_css %}
6
+ <link rel="stylesheet" href="/assets/css/pages/contact.css" />
7
+ {% endblock %}
8
+
9
+ {% block content %}
10
+ <!-- Contact Section -->
11
+ <h1 class="page-title">Get in Touch</h1>
12
+ <p class="page-intro">Ready to explore how AI can transform your business? Have questions about my services? I'd love to hear from you. Choose the method that works best for you.</p>
13
+
14
+ <div class="contact-methods">
15
+ <div class="contact-method">
16
+ <div class="contact-icon-container">
17
+ <svg class="icon contact-icon" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet">
18
+ <rect x="2" y="4" width="20" height="16" rx="2"></rect>
19
+ <path d="m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7"></path>
20
+ </svg>
21
+ </div>
22
+ <a href="mailto:charles@appsimple.io">charles@appsimple.io</a>
23
+ </div>
24
+
25
+ <div class="contact-method">
26
+ <div class="contact-icon-container">
27
+ <svg class="icon contact-icon" viewBox="0 0 24 24" preserveAspectRatio="xMidYMid meet">
28
+ <path d="M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z"></path>
29
+ <rect x="2" y="9" width="4" height="12"></rect>
30
+ <circle cx="4" cy="4" r="2"></circle>
31
+ </svg>
32
+ </div>
33
+ <a href="https://linkedin.com/in/charlesfeinn" target="_blank">LinkedIn</a>
34
+ </div>
35
+ </div>
36
+
37
+ <h2 class="section-heading">Send a Message</h2>
38
+ <p class="section-intro">Fill out the form below, and I'll get back to you within 24 hours.</p>
39
+
40
+ <form id="contact-form" class="contact-form" action="https://formspree.io/f/xpwplpjw" method="POST">
41
+ <div class="form-group">
42
+ <label class="form-label" for="name">Name</label>
43
+ <input type="text" id="name" name="name" class="form-input" required>
44
+ </div>
45
+
46
+ <div class="form-group">
47
+ <label class="form-label" for="email">Email</label>
48
+ <input type="email" id="email" name="email" class="form-input" required>
49
+ </div>
50
+
51
+ <div class="form-group">
52
+ <label class="form-label" for="company">Company (Optional)</label>
53
+ <input type="text" id="company" name="company" class="form-input">
54
+ </div>
55
+
56
+ <div class="form-group">
57
+ <label class="form-label" for="message">How can I help?</label>
58
+ <textarea id="message" name="message" class="form-textarea" required></textarea>
59
+ </div>
60
+
61
+ <!-- Add a form status element that will be hidden by default -->
62
+ <div id="form-status" class="form-status" style="display: none;"></div>
63
+
64
+ <button type="submit" class="form-button">Send Message</button>
65
+ </form>
66
+ {% endblock %}
workspace/website/dspy-prompt-optimization.html ADDED
@@ -0,0 +1,269 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}DSPy Prompt Optimization Case Study - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {# No extra_css needed as case-study styles should be in main.css #}
6
+
7
+ {% block content %}
8
+ <div class="back-navigation">
9
+ <a href="/portfolio" class="back-link">
10
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="back-arrow">
11
+ <path d="M19 12H5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
12
+ <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
13
+ </svg>
14
+ <span>Back to Portfolio</span>
15
+ </a>
16
+ </div>
17
+
18
+ <!-- Case Study Header -->
19
+ <div class="case-study-header">
20
+ <h1 class="page-title mb-md">Case Study: Automating LLM Prompt Optimization</h1>
21
+
22
+ <!-- Title and description at the top -->
23
+ <div class="app-description">
24
+ <h2 class="app-title mb-sm">Improving Benchmark Performance with DSPy</h2>
25
+ <p class="page-intro">An internal research project exploring programmatic prompt optimization using the DSPy framework to improve the performance of Llama 3.1 8B on the MMLU benchmark, surpassing manual prompt engineering efforts.</p>
26
+ </div>
27
+
28
+ <!-- Visual (Animation or Static Image) -->
29
+ <div class="mb-lg text-center"> {# Center the visual #}
30
+ <img src="/assets/images/dspy-mmlu-animation.svg" alt="DSPy Optimization Process Animation" style="max-width: 100%; height: auto; border-radius: var(--radius-md); box-shadow: var(--shadow-md);">
31
+ </div>
32
+
33
+ <!-- Metadata Grid -->
34
+ <div class="metadata-container">
35
+ <!-- Placeholder Icon (Optional - could use a generic AI/Optimization icon) -->
36
+ <div class="app-icon-container">
37
+ <img src="/assets/images/dspy_logo.png" alt="DSPy Logo" class="app-icon">
38
+ </div>
39
+
40
+ <!-- Compact metadata grid -->
41
+ <div class="project-metadata-grid">
42
+ <div class="metadata-column">
43
+ <div class="metadata-label">Project Type:</div>
44
+ <div class="metadata-value">Internal R&D / AI Engineering</div>
45
+ </div>
46
+ <div class="metadata-column">
47
+ <div class="metadata-label">Technology Focus:</div>
48
+ <div class="metadata-value">LLM Optimization, DSPy</div>
49
+ </div>
50
+ <div class="metadata-column">
51
+ <div class="metadata-label">Models Used:</div>
52
+ <div class="metadata-value">Llama 3.1 8B, GPT-4o-mini</div>
53
+ </div>
54
+ <div class="metadata-column">
55
+ <div class="metadata-label">Benchmark:</div>
56
+ <div class="metadata-value">MMLU</div>
57
+ </div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+
62
+ <!-- The Challenge -->
63
+ <div class="process-step">
64
+ <div class="process-step-content">
65
+ <div class="process-step-header">
66
+ <div class="expertise-icon-container">
67
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
68
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
69
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
70
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
71
+ </svg>
72
+ </div>
73
+ <h3>The Challenge</h3>
74
+ </div>
75
+ <div class="process-step-content-body">
76
+ <p>Manually crafting effective prompts for Large Language Models (LLMs) is a time-consuming and often unreliable process. Subtle changes in wording can lead to significant variations in performance, making it difficult to consistently achieve optimal results.</p>
77
+ <p>In previous experiments (<a href="https://chuckfinca.github.io/machine_learnings/posts/24-10-03-challenges-in-reproducing-llm-evaluation-results/" target="_blank" rel="noopener noreferrer">see blog post</a>), manual attempts to reproduce Meta's published MMLU benchmark score (73.0 macro avg) for the Llama 3.1 8B model only yielded a score of 68.3. This significant gap highlighted the limitations of manual prompt engineering and the need for a more systematic, automated approach to unlock the model's full potential.</p>
78
+ <p>The core challenges were:</p>
79
+ <ul class="service-list">
80
+ <li>The inefficiency and inconsistency of manual prompt tuning.</li>
81
+ <li><!-- ADDITION: Time cost/scalability -->The significant time investment required for manual optimization, making it difficult to adapt quickly to new models or evolving requirements.</li>
82
+ <li>Difficulty in reaching state-of-the-art performance levels through trial-and-error.</li>
83
+ <li>The need for a reproducible and data-driven method for prompt optimization.</li>
84
+ </ul>
85
+ </div>
86
+ </div>
87
+ </div>
88
+
89
+ <!-- My Approach -->
90
+ <div class="process-step">
91
+ <div class="process-step-content">
92
+ <div class="process-step-header">
93
+ <div class="expertise-icon-container">
94
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
95
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
96
+ </svg>
97
+ </div>
98
+ <h3>My Approach</h3>
99
+ </div>
100
+ <div class="process-step-content-body">
101
+ <p>To address the limitations of manual prompting, I explored using DSPy, an open-source framework designed for programming LLMs rather than just prompting them. DSPy automates the process of finding effective prompts based on data.</p>
102
+ <p>My approach involved:</p>
103
+ <ul class="service-list">
104
+ <li><strong>Defining the Task Structure:</strong> Created a DSPy <code>Signature</code> to clearly define the inputs (subject, question, choices) and the desired constrained output (A, B, C, or D) for the MMLU task.</li>
105
+ <li><strong>Building a DSPy Program:</strong> Implemented a <code>ChainOfThought</code> module within DSPy to encourage reasoning, adding fallback logic to handle potential output formatting issues.</li>
106
+ <li><strong>Leveraging Data for Optimization:</strong> Utilized the MMLU development and validation datasets to train and evaluate different prompt candidates automatically.</li>
107
+ <li><strong>Automated Optimization:</strong> Employed the <code>MIPROv2</code> optimizer within DSPy. This involved using a powerful "teacher" model (GPT-4o-mini) to generate and refine instructions and few-shot examples for the target Llama 3.1 8B model.</li>
108
+ <li><strong>Objective Evaluation:</strong> Used <code>answer_exact_match</code> as the metric to guide the optimization process towards prompts that maximize accuracy.</li>
109
+ </ul>
110
+ <!-- REVISED GOAL STATEMENT -->
111
+ <p>The goal was not just to improve performance but also to validate DSPy as a tool for creating more efficient, systematic, and adaptable AI engineering workflows compared to manual trial-and-error.</p>
112
+ </div>
113
+ </div>
114
+ </div>
115
+
116
+ <!-- Technical Implementation -->
117
+ <div class="process-step">
118
+ <div class="process-step-content">
119
+ <div class="process-step-header">
120
+ <div class="expertise-icon-container">
121
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
122
+ <path d="M16 18l6-6-6-6"/>
123
+ <path d="M8 6l-6 6 6 6"/>
124
+ </svg>
125
+ </div>
126
+ <h3>Technical Implementation</h3>
127
+ </div>
128
+ <div class="process-step-content-body">
129
+ <p>The implementation leveraged several key components within the Python ecosystem:</p>
130
+ <h4 class="mt-md mb-sm">Core Framework: DSPy</h4>
131
+ <ul class="service-list">
132
+ <li><strong><code>dspy.Signature</code> (<code>MMLUSignature</code>):</strong> Defined inputs (<code>subject</code>, <code>question</code>, <code>choices</code>) and a constrained <code>Literal['A', 'B', 'C', 'D']</code> output (<code>answer</code>) for clear task specification.</li>
133
+ <li><strong><code>dspy.Module</code> (<code>MMLUMultipleChoiceModule</code>):</strong> Wrapped a <code>dspy.ChainOfThought</code> predictor using the signature. Implemented temperature fallback logic to improve robustness against invalid model outputs.</li>
134
+ <li><strong><code>dspy.MIPROv2</code> Optimizer:</strong> Configured with <code>auto="medium"</code> settings, using GPT-4o-mini as both the <code>prompt_model</code> and <code>teacher_model</code> to generate optimized instructions and few-shot demonstrations.</li>
135
+ <li><strong><code>dspy.evaluate.answer_exact_match</code> Metric:</strong> Used to score prompt candidates during optimization based on accuracy.</li>
136
+ <li><strong><code>dspy.Evaluate</code>:</strong> Employed for the final evaluation on the held-out test set, running across all MMLU subjects.</li>
137
+ </ul>
138
+
139
+ <h4 class="mt-md mb-sm">Models & Data:</h4>
140
+ <ul class="service-list">
141
+ <li><strong>Target Model (<code>lm_task</code>):</strong> Meta's <code>meta-llama/Meta-Llama-3.1-8B-Instruct</code> accessed via Hugging Face (<code>dspy.HFModel</code>).</li>
142
+ <li><strong>Optimization Model (<code>lm_train</code>):</strong> OpenAI's <code>gpt-4o-mini</code> accessed via the OpenAI API (<code>dspy.OpenAI</code>).</li>
143
+ <li><strong>Dataset:</strong> <code>cais/mmlu</code> dataset loaded using Hugging Face <code>datasets</code> and formatted into <code>dspy.Example</code> objects using a custom preparation function (<code>prepare_mmlu_dataset</code>).</li>
144
+ <li><strong>Data Splits:</strong> MMLU 'dev' set used for training examples within optimization, 'validation' set used for scoring candidates during optimization, and 'test' set reserved for final, unbiased evaluation.</li>
145
+ </ul>
146
+
147
+ <h4 class="mt-md mb-sm">Environment:</h4>
148
+ <ul class="service-list">
149
+ <li>Python environment with <code>dspy-ai</code>, <code>datasets</code>, and necessary dependencies.</li>
150
+ <li>Execution primarily on Google Colab using GPU acceleration (A100).</li>
151
+ </ul>
152
+ </div>
153
+ </div>
154
+ </div>
155
+
156
+ <!-- Results & Impact -->
157
+ <div class="process-step">
158
+ <div class="process-step-content">
159
+ <div class="process-step-header">
160
+ <div class="expertise-icon-container">
161
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
162
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
163
+ <polyline points="22 4 12 14.01 9 11.01"/>
164
+ </svg>
165
+ </div>
166
+ <h3>Results & Impact</h3>
167
+ </div>
168
+ <div class="process-step-content-body">
169
+ <p>The automated prompt optimization using DSPy yielded significant improvements over manual methods:</p>
170
+
171
+ <!-- Key Metrics -->
172
+ <div class="about-stats mt-md mb-lg">
173
+ <div class="stat-item">
174
+ <div class="stat-number">68.3%</div>
175
+ <div class="stat-label">Best Manual MMLU Score (Macro Avg)</div>
176
+ </div>
177
+ <div class="stat-item" style="background-color: var(--secondary-light);"> {# Use secondary color for emphasis #}
178
+ <div class="stat-number" style="color: var(--secondary);">71.1%</div>
179
+ <div class="stat-label">DSPy Optimized MMLU Score (Macro Avg)</div>
180
+ </div>
181
+ <div class="stat-item">
182
+ <div class="stat-number">+2.8 pts</div>
183
+ <div class="stat-label">Improvement with DSPy</div>
184
+ </div>
185
+ </div>
186
+
187
+ <p>Key outcomes included:</p>
188
+ <ul class="service-list">
189
+ <li><strong>Performance Boost:</strong> Achieved a <strong>71.1% macro average</strong> MMLU score, a substantial <strong>+2.8 percentage point</strong> increase compared to the best manually engineered prompt (68.3%).</li>
190
+ <li><strong>Closing the Gap:</strong> The optimized score came significantly closer to Meta's published 73.0% score for the Llama 3.1 8B model.</li>
191
+ <li><!-- ADDITION: Efficiency --><strong>Efficiency Demonstrated:</strong> While not explicitly timed against the manual process in this project, the automated nature of DSPy inherently replaces hours of manual tuning with a programmatic, repeatable compilation step.</li>
192
+ <li><strong>Validation of Technique:</strong> Confirmed the effectiveness of DSPy and programmatic prompting as a powerful tool for enhancing LLM performance on specific tasks.</li>
193
+ </ul>
194
+ <p>This internal project demonstrates the capability to leverage advanced frameworks like DSPy to systematically tune and optimize LLM behavior, leading to more effective and reliable AI solutions compared to relying solely on manual prompt adjustments.</p>
195
+ </div>
196
+ </div>
197
+ </div>
198
+
199
+ <!-- Key Learnings -->
200
+ <div class="process-step">
201
+ <div class="process-step-content">
202
+ <div class="process-step-header">
203
+ <div class="expertise-icon-container">
204
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
205
+ <path d="M18 8h1a4 4 0 0 1 0 8h-1"/>
206
+ <path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"/>
207
+ <line x1="6" y1="1" x2="6" y2="4"/>
208
+ <line x1="10" y1="1" x2="10" y2="4"/>
209
+ <line x1="14" y1="1" x2="14" y2="4"/>
210
+ </svg>
211
+ </div>
212
+ <h3>Key Learnings</h3>
213
+ </div>
214
+ <div class="process-step-content-body">
215
+ <p>This exploration into DSPy provided several valuable insights:</p>
216
+ <ul class="service-list">
217
+ <li><strong>DSPy's Power:</strong> Programmatic prompting frameworks like DSPy can significantly outperform manual prompt engineering, both in terms of final performance and efficiency.</li>
218
+ <li><strong>Letting Go:</strong> Effective use of DSPy involves defining the task structure (inputs/outputs) clearly and letting the framework optimize the details, rather than over-specifying instructions initially.</li>
219
+ <li><strong>Importance of Data:</strong> High-quality training and validation data are crucial for guiding the optimization process effectively.</li>
220
+ <li><strong>Metric Alignment:</strong> Choosing the right evaluation metric (<code>answer_exact_match</code> in this case) directly impacts the quality of the optimized prompt.</li>
221
+ <li><!-- ADDITION: Adaptability/Future-proofing --><strong>Adaptability & Future-Proofing:</strong> DSPy's programmatic approach makes it significantly easier to re-optimize prompts when underlying models change (e.g., testing Llama 3.1 vs Llama 4). This modularity is crucial for staying current in the rapidly evolving LLM landscape and offers a more sustainable method than continuous manual re-tuning for each new model.</li>
222
+ <li><strong>Robustness Matters:</strong> Real-world LLM interactions require handling potential errors, such as invalid output formats, which necessitated adding fallback logic (like varying temperature).</li>
223
+ <li><strong>Community Value:</strong> Engaging with the DSPy community (like their Discord) proved invaluable for troubleshooting and understanding best practices.</li>
224
+ </ul>
225
+ <!-- REVISED CONCLUDING SENTENCE -->
226
+ <p>These learnings reinforce the value of systematic, data-driven approaches to LLM development and optimization, moving beyond simple prompt tweaking towards more robust and adaptable AI engineering.</p>
227
+ </div>
228
+ </div>
229
+ </div>
230
+
231
+ <!-- Applying This to Client Solutions -->
232
+ <div class="process-step">
233
+ <div class="process-step-content">
234
+ <div class="process-step-header">
235
+ <div class="expertise-icon-container">
236
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
237
+ <line x1="12" y1="5" x2="12" y2="19"></line>
238
+ <polyline points="19 12 12 19 5 12"></polyline>
239
+ </svg>
240
+ </div>
241
+ <h3>Applying This to Client Solutions</h3>
242
+ </div>
243
+ <div class="process-step-content-body">
244
+ <p>While this project focused on a standard benchmark, the principles and techniques demonstrated are directly applicable to building high-performing, custom AI solutions for specific business problems. Leveraging DSPy allows for:</p>
245
+ <ul class="service-list">
246
+ <!-- REVISED/ADDED BULLETS -->
247
+ <li><strong>Faster Development & Iteration:</strong> Automating prompt optimization significantly reduces the time spent on manual trial-and-error, allowing for quicker deployment, refinement, and adaptation of AI solutions.</li>
248
+ <li><strong>Tailored Performance:</strong> Optimizing prompts specifically for a client's unique data and task ensures the AI solution performs optimally in their context.</li>
249
+ <li><strong>More Reliable Solutions:</strong> Building programs with clear signatures and metrics leads to more predictable and robust LLM behavior.</li>
250
+ <li><strong>Model Agnosticism & Future-Proofing:</strong> Designing solutions with frameworks like DSPy facilitates easier swapping and testing of different underlying LLMs (from various providers like OpenAI, Anthropic, Meta, Mistral, or open-source models). Optimized prompts can be adapted or re-optimized for new, better, or more cost-effective models as they become available, protecting the client's investment.</li>
251
+ <li><strong>Focus on Value:</strong> By automating the tedious tuning process, engineering effort can be directed towards solving the core business problem and delivering tangible value.</li>
252
+ </ul>
253
+ <!-- REVISED CONCLUDING PARAGRAPH -->
254
+ <p>This modular and adaptable approach ensures clients aren't locked into a single provider and can benefit from the rapid advancements across the entire AI ecosystem.</p>
255
+ </div>
256
+ </div>
257
+ </div>
258
+
259
+ <!-- CTA for services -->
260
+ <div class="process-cta">
261
+ <h3>Need to optimize AI performance for your business task?</h3>
262
+ <p>Getting the best results from LLMs requires more than just basic prompting. My expertise includes leveraging advanced frameworks like DSPy to systematically optimize AI performance for specific goals. Let's discuss how I can build a high-performing, reliable AI solution tailored to your unique challenges.</p>
263
+ <a href="/contact" class="process-cta-button">Discuss Your AI Project</a>
264
+ </div>
265
+ {% endblock %}
266
+
267
+ {% block extra_js %}
268
+ <!-- No additional JavaScript needed for this case study -->
269
+ {% endblock %}
workspace/website/fot-recommender.html ADDED
@@ -0,0 +1,302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}FOT Intervention Recommender Case Study - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {% block content %}
6
+ <div class="back-navigation">
7
+ <a href="/portfolio" class="back-link">
8
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="back-arrow">
9
+ <path d="M19 12H5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
10
+ <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
11
+ </svg>
12
+ <span>Back to Portfolio</span>
13
+ </a>
14
+ </div>
15
+
16
+ <!-- Case Study Header -->
17
+ <div class="case-study-header">
18
+ <h1 class="page-title mb-md">Case Study: Freshman On-Track Intervention Recommender</h1>
19
+
20
+ <!-- Title and description at the top -->
21
+ <div class="app-description">
22
+ <h2 class="app-title mb-sm">AI-Powered Educational Intervention System</h2>
23
+ <p class="page-intro">A production-grade RAG (Retrieval-Augmented Generation) system that transforms student narratives into evidence-based intervention recommendations, helping educators systematically support at-risk 9th graders.</p>
24
+ </div>
25
+
26
+ <!-- Visual (Animation or Demo Screenshot) -->
27
+ <div class="mb-lg text-center">
28
+ <img src="/assets/images/fot-demo.svg" alt="FOT Recommender Interface" style="max-width: 100%; height: auto; border-radius: var(--radius-md); box-shadow: var(--shadow-md);">
29
+ </div>
30
+
31
+ <!-- Metadata Grid -->
32
+ <div class="metadata-container">
33
+ <!-- Project Icon -->
34
+ <div class="app-icon-container">
35
+ <div class="placeholder-icon" style="font-size: 1.5rem; font-weight: 600; background-color: var(--primary-light); color: var(--primary);">FOT</div>
36
+ </div>
37
+
38
+ <!-- Compact metadata grid -->
39
+ <div class="project-metadata-grid">
40
+ <div class="metadata-column">
41
+ <div class="metadata-label">Project Type:</div>
42
+ <div class="metadata-value">AI Engineering / EdTech</div>
43
+ </div>
44
+ <div class="metadata-column">
45
+ <div class="metadata-label">Technology Stack:</div>
46
+ <div class="metadata-value">Python, RAG, FAISS, Gemini</div>
47
+ </div>
48
+ <div class="metadata-column">
49
+ <div class="metadata-label">Deployment:</div>
50
+ <div class="metadata-value">Hugging Face Spaces</div>
51
+ </div>
52
+ <div class="metadata-column">
53
+ <div class="metadata-label">Timeline:</div>
54
+ <div class="metadata-value">5 days (PoC)</div>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ </div>
59
+
60
+ <!-- The Challenge -->
61
+ <div class="process-step">
62
+ <div class="process-step-content">
63
+ <div class="process-step-header">
64
+ <div class="expertise-icon-container">
65
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
66
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
67
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
68
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
69
+ </svg>
70
+ </div>
71
+ <h3>The Challenge</h3>
72
+ </div>
73
+ <div class="process-step-content-body">
74
+ <p>Freshman year performance is the strongest predictor of high school graduation, yet educators often lack systematic tools to match at-risk 9th graders with evidence-based interventions. The challenge was creating a system that could bridge the gap between educational research and practical classroom application.</p>
75
+ <ul class="service-list">
76
+ <li><strong>Inconsistent Intervention Selection</strong>: Educators relied on intuition rather than proven best practices, leading to varied and potentially ineffective support</li>
77
+ <li><strong>Information Overload</strong>: Educational research was scattered across numerous documents, making it difficult for busy educators to quickly find relevant strategies</li>
78
+ <li><strong>Time Constraints</strong>: Teachers needed immediate, actionable guidance but lacked the time for extensive research</li>
79
+ <li><strong>Communication Barriers</strong>: Different stakeholders (teachers, parents, administrators) required recommendations tailored to their specific roles and perspectives</li>
80
+ </ul>
81
+ </div>
82
+ </div>
83
+ </div>
84
+
85
+ <!-- My Approach -->
86
+ <div class="process-step">
87
+ <div class="process-step-content">
88
+ <div class="process-step-header">
89
+ <div class="expertise-icon-container">
90
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
91
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
92
+ </svg>
93
+ </div>
94
+ <h3>My Approach</h3>
95
+ </div>
96
+ <div class="process-step-content-body">
97
+ <p>I designed a sophisticated RAG system to transform educational research into an intelligent, conversational interface. The approach centered on making evidence-based interventions immediately accessible and actionable, augmenting rather than replacing educator expertise.</p>
98
+
99
+ <h4 class="mt-md mb-sm">Strategic Design Decisions:</h4>
100
+ <ul class="service-list">
101
+ <li><strong>Quality-First Data Strategy</strong>: Instead of building a complex PDF extraction pipeline, I manually curated a high-quality knowledge base from authoritative sources to guarantee maximum accuracy</li>
102
+ <li><strong>Semantic Chunking</strong>: Developed a concept-based chunking strategy that groups related interventions together, creating more meaningful and contextually rich data</li>
103
+ <li><strong>Persona-Based Generation</strong>: Implemented distinct prompt templates for teachers, parents, and principals, ensuring recommendations were appropriately tailored for each audience</li>
104
+ <li><strong>Evidence-Based Foundation</strong>: Grounded all recommendations in peer-reviewed research from organizations like Network for College Success and IES</li>
105
+ </ul>
106
+
107
+ <h4 class="mt-md mb-sm">AI-Human Collaboration Methodology:</h4>
108
+ <p>This project leveraged AI as a strategic co-pilot throughout development. I engaged multiple models in iterative dialogue to refine architecture and implementation decisions, while carefully managing conversational context to maintain high standards and drastically reduce hallucination, leading to better, more consistent code quality.</p>
109
+ </div>
110
+ </div>
111
+ </div>
112
+
113
+ <!-- Technical Implementation -->
114
+ <div class="process-step">
115
+ <div class="process-step-content">
116
+ <div class="process-step-header">
117
+ <div class="expertise-icon-container">
118
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
119
+ <path d="M16 18l6-6-6-6"/>
120
+ <path d="M8 6l-6 6 6 6"/>
121
+ </svg>
122
+ </div>
123
+ <h3>Technical Implementation</h3>
124
+ </div>
125
+ <div class="process-step-content-body">
126
+ <p>The system was built with a modern Python stack and deployed as a live, interactive application. The architecture prioritizes accuracy, maintainability, and a clear path to production scaling.</p>
127
+
128
+ <h4 class="mt-md mb-sm">Core RAG Architecture:</h4>
129
+ <ul class="service-list">
130
+ <li><strong>Knowledge Base</strong>: Built from 6 authoritative educational sources, manually curated into 27 high-relevance intervention chunks using semantic clustering</li>
131
+ <li><strong>Retrieval Engine</strong>: Utilizes the all-MiniLM-L6-v2 sentence transformer with FAISS vector database for efficient semantic search</li>
132
+ <li><strong>Generation Engine</strong>: Integrates Google's Gemini 1.5 Flash model with three distinct, persona-optimized prompt templates</li>
133
+ <li><strong>Quality Controls</strong>: Implements similarity score filtering to ensure only the most relevant evidence is used in recommendations</li>
134
+ </ul>
135
+
136
+ <h4 class="mt-md mb-sm">Production Features:</h4>
137
+ <ul class="service-list">
138
+ <li><strong>Live Interactive Demo</strong>: Deployed on Hugging Face Spaces with Gradio interface and example scenarios</li>
139
+ <li><strong>Modern Python Stack</strong>: Python 3.12 with fast dependency management via uv, formatted with black and ruff</li>
140
+ <li><strong>Source Attribution</strong>: Full transparency with page numbers and relevance scores for all recommendations</li>
141
+ <li><strong>Secure Access</strong>: Protected demo environment with access key authentication</li>
142
+ </ul>
143
+
144
+ <h4 class="mt-md mb-sm">Technologies Used:</h4>
145
+ <ul class="service-list">
146
+ <li>Python 3.12 with sentence-transformers and FAISS for retrieval</li>
147
+ <li>Google Gemini 1.5 Flash for natural language generation</li>
148
+ <li>Gradio for interactive web interface</li>
149
+ <li>Hugging Face Spaces for deployment and hosting</li>
150
+ <li>Comprehensive testing suite with pytest and quality tooling</li>
151
+ </ul>
152
+ </div>
153
+ </div>
154
+ </div>
155
+
156
+ <!-- Results & Impact -->
157
+ <div class="process-step">
158
+ <div class="process-step-content">
159
+ <div class="process-step-header">
160
+ <div class="expertise-icon-container">
161
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
162
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
163
+ <polyline points="22 4 12 14.01 9 11.01"/>
164
+ </svg>
165
+ </div>
166
+ <h3>Results & Impact</h3>
167
+ </div>
168
+ <div class="process-step-content-body">
169
+ <p>The FOT Intervention Recommender successfully transforms scattered educational research into an intelligent, accessible tool that empowers educators with evidence-based guidance.</p>
170
+
171
+ <!-- Key Metrics -->
172
+ <div class="about-stats mt-md">
173
+ <div class="stat-item">
174
+ <div class="stat-number">27</div>
175
+ <div class="stat-label">Curated Intervention Strategies</div>
176
+ </div>
177
+ <div class="stat-item">
178
+ <div class="stat-number">6</div>
179
+ <div class="stat-label">Authoritative Source Documents</div>
180
+ </div>
181
+ <div class="stat-item">
182
+ <div class="stat-number">3</div>
183
+ <div class="stat-label">Persona-Specific Output Types</div>
184
+ </div>
185
+ </div>
186
+
187
+ <p class="mt-md">The system delivers significant value to educational stakeholders:</p>
188
+ <ul class="service-list">
189
+ <li><strong>Immediate Access to Best Practices</strong>: Transforms hours of research into seconds of targeted recommendations based on student narratives</li>
190
+ <li><strong>Improved Intervention Quality</strong>: Grounds recommendations in peer-reviewed research, moving beyond intuition-based decisions</li>
191
+ <li><strong>Enhanced Stakeholder Communication</strong>: Tailored outputs ensure teachers, parents, and administrators receive relevant, actionable guidance</li>
192
+ <li><strong>Complete Transparency</strong>: Full source attribution with page numbers and relevance scores builds trust and enables verification</li>
193
+ <li><strong>Scalable Architecture</strong>: Production-ready codebase with comprehensive testing enables easy expansion and deployment</li>
194
+ </ul>
195
+
196
+ <div class="testimonial">
197
+ <div class="testimonial-content">This PoC successfully de-risked our primary technical questions. It proved that a RAG-based approach could deliver accurate, evidence-based results on this specialized knowledge domain, establishing a clear path to a production-ready tool.</div>
198
+ <div class="testimonial-author">— Internal Project Assessment</div>
199
+ </div>
200
+ </div>
201
+ </div>
202
+ </div>
203
+
204
+ <!-- Key Learnings -->
205
+ <div class="process-step">
206
+ <div class="process-step-content">
207
+ <div class="process-step-header">
208
+ <div class="expertise-icon-container">
209
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
210
+ <path d="M18 8h1a4 4 0 0 1 0 8h-1"/>
211
+ <path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"/>
212
+ <line x1="6" y1="1" x2="6" y2="4"/>
213
+ <line x1="10" y1="1" x2="10" y2="4"/>
214
+ <line x1="14" y1="1" x2="14" y2="4"/>
215
+ </svg>
216
+ </div>
217
+ <h3>Key Learnings</h3>
218
+ </div>
219
+ <div class="process-step-content-body">
220
+ <p>This project reinforced several important principles for building domain-specific AI systems:</p>
221
+ <ul class="service-list">
222
+ <li><strong>Quality Over Quantity</strong>: Manual curation of high-quality knowledge significantly outperformed automated extraction in accuracy and relevance</li>
223
+ <li><strong>Domain Expertise Matters</strong>: Understanding the educational context was crucial for designing effective chunking strategies and prompt templates</li>
224
+ <li><strong>User-Centric Design</strong>: Different stakeholders need different types of information presented in different ways—one size doesn't fit all</li>
225
+ <li><strong>Transparency Builds Trust</strong>: Providing source attribution and confidence scores was essential for adoption in high-stakes educational contexts</li>
226
+ <li><strong>AI as Co-Pilot</strong>: Using AI strategically throughout development accelerated progress while maintaining quality through careful context management</li>
227
+ </ul>
228
+ <p>These insights directly inform how I approach building AI systems for other knowledge-intensive domains where accuracy and trust are paramount.</p>
229
+ </div>
230
+ </div>
231
+ </div>
232
+
233
+ <!-- REVISED: From PoC to Production -->
234
+ <div class="process-step">
235
+ <div class="process-step-content">
236
+ <div class="process-step-header">
237
+ <div class="expertise-icon-container">
238
+ <svg class="icon expertise-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
239
+ <line x1="12" y1="19" x2="12" y2="5"></line>
240
+ <polyline points="5 12 12 5 19 12"></polyline>
241
+ </svg>
242
+ </div>
243
+ <h3>From PoC to Production: Next Steps</h3>
244
+ </div>
245
+ <div class="process-step-content-body">
246
+ <p>This proof-of-concept establishes a strong foundation. To evolve this tool into a robust, production-grade system, I would focus on the following key areas:</p>
247
+
248
+ <h4 class="mt-md mb-sm">1. Containerization & API Deployment</h4>
249
+ <p>Package the application into a formal REST API using FastAPI and containerize it with Docker. This enables deployment to a scalable, serverless platform like Google Cloud Run, ensuring high availability and cost-effective operation.</p>
250
+
251
+ <h4 class="mt-md mb-sm">2. Building the "Data Flywheel" for Evaluation</h4>
252
+ <p>True long-term value comes from learning and improving. I would implement an observability layer to capture input/output pairs. This data would then be used to:</p>
253
+ <ul class="service-list">
254
+ <li>Create a system for subject-matter experts (educators) to label and rate the quality of recommendations.</li>
255
+ <li>Establish a continuous evaluation pipeline to measure model performance against this "golden dataset," creating a data flywheel that drives ongoing improvements.</li>
256
+ </ul>
257
+
258
+ <h4 class="mt-md mb-sm">3. Enhancing System Modularity & Scalability</h4>
259
+ <p>To ensure the system is adaptable and future-proof, I would refactor the core logic to be more modular. This includes:</p>
260
+ <ul class="service-list">
261
+ <li>Abstracting the core components to easily swap out embedding models, generative models (e.g., GPT, Claude), or vector databases (e.g., Pinecone, Weaviate) to leverage the best technology as it evolves.</li>
262
+ <li>Developing more advanced data preparation and semantic chunking strategies to handle a larger and more diverse knowledge base.</li>
263
+ </ul>
264
+ </div>
265
+ </div>
266
+ </div>
267
+
268
+
269
+ <!-- REVISED: CTA Section with Live Demo and Notebook Links -->
270
+ <div class="index-cta mt-xl">
271
+ <h3 class="mb-sm">Explore the Project</h3>
272
+ <p class="mb-md">
273
+ Dive into the technical implementation on GitHub, interact with the live demo, or review the original proof-of-concept notebook.
274
+ </p>
275
+ <div class="cta-buttons">
276
+ <a href="https://huggingface.co/spaces/chuckfinca/fot-recommender-api" class="cta-button" target="_blank" rel="noopener">
277
+ Launch Live Demo
278
+ </a>
279
+ <a href="https://github.com/chuckfinca/fot-intervention-recommender" class="cta-button-outline" target="_blank" rel="noopener">
280
+ View on GitHub
281
+ </a>
282
+ </div>
283
+ <p class="mt-md">
284
+ For a step-by-step technical walkthrough of the core retrieval logic, you can <a href="https://colab.research.google.com/github/chuckfinca/fot-intervention-recommender/blob/main/notebooks/fot_recommender_poc.ipynb" target="_blank" rel="noopener">explore the original proof-of-concept notebook</a>.
285
+ </p>
286
+ <p class="mt-sm" style="font-size: var(--text-xs); color: var(--neutral-500);">
287
+ <em>Note: The live demo is access-key protected to ensure a dedicated review experience. Please feel free to request access via the project's GitHub repository or by reaching out on my <a href="/contact">contact page</a>, and I'll be happy to provide a key.</em>
288
+ </p>
289
+ </div>
290
+
291
+
292
+ <!-- CTA for services -->
293
+ <div class="process-cta">
294
+ <h3>Need an intelligent knowledge management system?</h3>
295
+ <p>My experience building domain-specific RAG systems like this one enables me to create AI solutions that transform complex knowledge into accessible, actionable guidance. Whether for education, healthcare, or business intelligence, I build systems that enhance human expertise with AI-powered insights.</p>
296
+ <a href="/contact" class="process-cta-button">Discuss Your AI Project</a>
297
+ </div>
298
+ {% endblock %}
299
+
300
+ {% block extra_js %}
301
+ <!-- No additional JavaScript needed for this case study -->
302
+ {% endblock %}
workspace/website/guidedmind.html ADDED
@@ -0,0 +1,352 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}Guided Mind Case Study - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {# No extra_css needed as case-study styles should be in main.css #}
6
+
7
+ {% block content %}
8
+ <div class="back-navigation">
9
+ <a href="/portfolio" class="back-link">
10
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="back-arrow">
11
+ <path d="M19 12H5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
12
+ <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
13
+ </svg>
14
+ <span>Back to Portfolio</span>
15
+ </a>
16
+ </div>
17
+
18
+ <!-- Case Study Header -->
19
+ <div class="case-study-header">
20
+ <h1 class="page-title mb-md">Case Study: Guided Mind</h1>
21
+
22
+ <!-- Title and description at the top -->
23
+ <div class="app-description">
24
+ <h2 class="app-title mb-sm">Meditation Content Marketplace</h2>
25
+ <p class="page-intro">Building a cross-platform marketplace connecting multiple meditation teachers with a global audience through a curated content experience.</p>
26
+ </div>
27
+
28
+ <!-- App icon and compact metadata grid in a row -->
29
+ <div class="metadata-container">
30
+ <!-- App icon on the left -->
31
+ <div class="app-icon-container">
32
+ <img src="/assets/images/guidedMind.png" alt="Guided Mind Icon" class="app-icon">
33
+ </div>
34
+
35
+ <!-- Compact metadata grid to the right -->
36
+ <div class="project-metadata-grid">
37
+ <div class="metadata-column">
38
+ <div class="metadata-label">Platform:</div>
39
+ <div class="metadata-value">iOS & Android</div>
40
+ </div>
41
+ <div class="metadata-column">
42
+ <div class="metadata-label">Timeline:</div>
43
+ <div class="metadata-value">6 months initial development</div>
44
+ </div>
45
+ <div class="metadata-column">
46
+ <div class="metadata-label">Role:</div>
47
+ <div class="metadata-value">Founder & Lead Developer</div>
48
+ </div>
49
+ <div class="metadata-column">
50
+ <div class="metadata-label">Partners:</div>
51
+ <div class="metadata-value">9 professional meditation guides</div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <!-- App Screenshots -->
58
+ <div class="mb-lg">
59
+ <h3 class="section-heading mb-md">Project Results</h3>
60
+ <div class="screenshots-grid">
61
+ <img src="/assets/images/iPhone.png" alt="Guided Mind screenshot" class="app-screenshot">
62
+ <img src="/assets/images/iPhone_2.png" alt="Guided Mind screenshot" class="app-screenshot">
63
+ <img src="/assets/images/iPhone_3.png" alt="Guided Mind screenshot" class="app-screenshot">
64
+ <img src="/assets/images/iPhone_4.png" alt="Guided Mind screenshot" class="app-screenshot">
65
+ </div>
66
+ </div>
67
+
68
+ <!-- The Challenge -->
69
+ <div class="process-step">
70
+ <div class="process-step-content">
71
+ <div class="process-step-header">
72
+ <div class="expertise-icon-container">
73
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
74
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
75
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
76
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
77
+ </svg>
78
+ </div>
79
+ <h3>The Challenge</h3>
80
+ </div>
81
+ <div class="process-step-content-body">
82
+ <p>At the time of Guided Mind's creation, meditation content was divided into two categories: single-creator apps with limited content variety, and subscription platforms with no clear attribution to individual teachers. I saw an opportunity to create a marketplace that would:</p>
83
+
84
+ <ul class="service-list">
85
+ <li><strong>Connect multiple content creators</strong> with audiences under a unified platform</li>
86
+ <li><strong>Preserve teacher identity</strong> while maintaining a consistent user experience</li>
87
+ <li><strong>Create a sustainable business model</strong> for independent meditation teachers</li>
88
+ <li><strong>Reach both iOS and Android users</strong> with a high-quality experience</li>
89
+ <li><strong>Offer topic-specific purchases</strong> rather than forcing all-or-nothing subscriptions</li>
90
+ </ul>
91
+
92
+ <p>The technical challenges were significant, requiring a multi-platform solution that could scale with both content volume and user base while maintaining a seamless experience across devices.</p>
93
+ </div>
94
+ </div>
95
+ </div>
96
+
97
+ <!-- My Approach -->
98
+ <div class="process-step">
99
+ <div class="process-step-content">
100
+ <div class="process-step-header">
101
+ <div class="expertise-icon-container">
102
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
103
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
104
+ </svg>
105
+ </div>
106
+ <h3>My Approach</h3>
107
+ </div>
108
+ <div class="process-step-content-body">
109
+ <p>I approached Guided Mind as both a technical and business challenge, with several key strategies:</p>
110
+
111
+ <h4 class="mt-md mb-sm">Marketplace Strategy:</h4>
112
+ <ul class="service-list">
113
+ <li><strong>Content quality standards</strong> to ensure consistent quality while allowing each guide's unique voice</li>
114
+ <li><strong>Topic-based purchasing model</strong> allowing users to buy precisely the content they needed</li>
115
+ <li><strong>Revenue sharing agreements</strong> with content creators based on their content's performance</li>
116
+ <li><strong>Freemium model</strong> with 20+ free meditations to encourage platform adoption</li>
117
+ </ul>
118
+
119
+ <h4 class="mt-md mb-sm">Technical Strategy:</h4>
120
+ <ul class="service-list">
121
+ <li><strong>Cross-platform development</strong> to reach both iOS and Android users</li>
122
+ <li><strong>Scalable content management system</strong> designed to handle hundreds of audio files</li>
123
+ <li><strong>Unified taxonomy and categorization system</strong> across all content creators</li>
124
+ <li><strong>Progressive content loading</strong> to prevent overwhelming users with too many options</li>
125
+ </ul>
126
+ </div>
127
+ </div>
128
+ </div>
129
+
130
+ <!-- Technical Implementation -->
131
+ <div class="process-step">
132
+ <div class="process-step-content">
133
+ <div class="process-step-header">
134
+ <div class="expertise-icon-container">
135
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
136
+ <path d="M16 18l6-6-6-6"/>
137
+ <path d="M8 6l-6 6 6 6"/>
138
+ </svg>
139
+ </div>
140
+ <h3>Technical Implementation</h3>
141
+ </div>
142
+ <div class="process-step-content-body">
143
+ <p>Building a cross-platform marketplace for audio content presented unique technical challenges that required thoughtful solutions:</p>
144
+
145
+ <h4 class="mt-md mb-sm">Mobile Applications:</h4>
146
+ <p>I developed native applications for both major platforms to ensure optimal performance and user experience:</p>
147
+
148
+ <ul class="service-list">
149
+ <li><strong>iOS App</strong> - Built with Objective-C to provide a responsive, native feel for Apple users</li>
150
+ <li><strong>Android App</strong> - Developed using Java to reach the global Android user base</li>
151
+ <li><strong>Custom Audio Player</strong> - Created a reliable playback system with background capabilities</li>
152
+ <li><strong>Offline Access</strong> - Implemented efficient content download and storage system</li>
153
+ <li><strong>Platform-Specific UX</strong> - Tailored interfaces to follow platform design conventions</li>
154
+ </ul>
155
+
156
+ <h4 class="mt-md mb-sm">Backend Systems:</h4>
157
+ <p>I designed a scalable infrastructure to support content distribution and marketplace operations:</p>
158
+
159
+ <ul class="service-list">
160
+ <li><strong>Content Delivery</strong> - Optimized for both streaming and download performance</li>
161
+ <li><strong>User Account Management</strong> - Cross-platform authentication and purchase history</li>
162
+ <li><strong>Analytics System</strong> - Tracking usage patterns to guide content strategy</li>
163
+ <li><strong>Creator Dashboards</strong> - Providing content performance metrics to creators</li>
164
+ </ul>
165
+
166
+ <h4 class="mt-md mb-sm">Content Management:</h4>
167
+ <p>I developed streamlined workflows for managing the diverse content library:</p>
168
+
169
+ <ul class="service-list">
170
+ <li><strong>Audio Processing Pipeline</strong> - Standardizing audio quality across submissions</li>
171
+ <li><strong>Metadata System</strong> - Creating consistent categorization across creators</li>
172
+ <li><strong>Approval Workflow</strong> - Ensuring all content met quality standards</li>
173
+ <li><strong>Versioning System</strong> - Managing content updates without disrupting users</li>
174
+ </ul>
175
+
176
+ <h4 class="mt-md mb-sm">Technologies Used:</h4>
177
+ <ul class="service-list">
178
+ <li>Objective-C and Java for native mobile development</li>
179
+ <li>Node.js for backend services</li>
180
+ <li>MongoDB for flexible content storage</li>
181
+ <li>AWS S3 for audio file storage</li>
182
+ <li>In-app purchase systems for both iOS and Android</li>
183
+ </ul>
184
+ </div>
185
+ </div>
186
+ </div>
187
+
188
+ <!-- Results & Impact -->
189
+ <div class="process-step">
190
+ <div class="process-step-content">
191
+ <div class="process-step-header">
192
+ <div class="expertise-icon-container">
193
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
194
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
195
+ <polyline points="22 4 12 14.01 9 11.01"/>
196
+ </svg>
197
+ </div>
198
+ <h3>Results & Impact</h3>
199
+ </div>
200
+ <div class="process-step-content-body">
201
+ <p>Guided Mind has achieved significant success as a meditation content marketplace:</p>
202
+
203
+ <!-- Key Metrics -->
204
+ <div class="about-stats mt-md">
205
+ <div class="stat-item">
206
+ <div class="stat-number">295K+</div>
207
+ <div class="stat-label">Total app installations</div>
208
+ </div>
209
+
210
+ <div class="stat-item">
211
+ <div class="stat-number">9</div>
212
+ <div class="stat-label">Content creators onboarded</div>
213
+ </div>
214
+
215
+ <div class="stat-item">
216
+ <div class="stat-number">4.7</div>
217
+ <div class="stat-label">App Store rating</div>
218
+ </div>
219
+ </div>
220
+
221
+ <p class="mt-md">For meditation teachers, the platform provided:</p>
222
+
223
+ <ul class="service-list">
224
+ <li>A turnkey digital distribution solution without technical overhead</li>
225
+ <li>Access to a global audience of meditation enthusiasts</li>
226
+ <li>Ongoing revenue from their content without managing subscriptions</li>
227
+ <li>Professional presentation of their work alongside respected peers</li>
228
+ </ul>
229
+
230
+ <p>For users, Guided Mind offered unique benefits:</p>
231
+
232
+ <ul class="service-list">
233
+ <li>Access to multiple teaching styles within a single application</li>
234
+ <li>Flexibility to purchase only content relevant to their specific needs</li>
235
+ <li>A consistent, high-quality user experience across both iOS and Android</li>
236
+ <li>Free content to experience different teachers before purchasing</li>
237
+ </ul>
238
+
239
+ <div class="testimonial">
240
+ <div class="testimonial-content">"Guided Mind revolutionized how I distribute my meditation content. Before this platform, I was struggling with hosting my own website and handling payments. Now I can focus on what I do best—creating helpful guided meditations—while reaching a much larger audience."</div>
241
+ <div class="testimonial-author">— Glenda Cedarleaf, Meditation Guide & Platform Partner</div>
242
+ </div>
243
+ </div>
244
+ </div>
245
+ </div>
246
+
247
+ <!-- Key Learnings -->
248
+ <div class="process-step">
249
+ <div class="process-step-content">
250
+ <div class="process-step-header">
251
+ <div class="expertise-icon-container">
252
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
253
+ <path d="M18 8h1a4 4 0 0 1 0 8h-1"/>
254
+ <path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"/>
255
+ <line x1="6" y1="1" x2="6" y2="4"/>
256
+ <line x1="10" y1="1" x2="10" y2="4"/>
257
+ <line x1="14" y1="1" x2="14" y2="4"/>
258
+ </svg>
259
+ </div>
260
+ <h3>Key Learnings</h3>
261
+ </div>
262
+ <div class="process-step-content-body">
263
+ <p>Building and scaling Guided Mind provided valuable insights into creating successful content marketplaces:</p>
264
+
265
+ <h4 class="mt-md mb-sm">Marketplace Dynamics:</h4>
266
+ <ul class="service-list">
267
+ <li><strong>Quality over quantity</strong> - Curating fewer high-quality contributors created more value than onboarding many mediocre ones</li>
268
+ <li><strong>Transparent creator relationships</strong> - Clear communication about platform expectations and revenue sharing built trust</li>
269
+ <li><strong>User-driven features</strong> - Listening to user feedback revealed unexpected feature priorities</li>
270
+ <li><strong>Flexible purchasing model</strong> - Topic-based purchases outperformed subscription models for specialized content</li>
271
+ </ul>
272
+
273
+ <h4 class="mt-md mb-sm">Technical Architecture:</h4>
274
+ <ul class="service-list">
275
+ <li><strong>Platform-specific development</strong> - Native apps provided better user experience than cross-platform shortcuts</li>
276
+ <li><strong>Scalable content delivery</strong> - Designing for growth from the start prevented major refactoring later</li>
277
+ <li><strong>Metadata importance</strong> - Investing in robust metadata systems significantly improved content discovery</li>
278
+ <li><strong>Progressive implementation</strong> - Starting with core features and expanding based on usage patterns optimized development resources</li>
279
+ </ul>
280
+
281
+ <p>These lessons have informed my approach to all subsequent platform development projects, particularly in how I balance technical implementation with business model considerations.</p>
282
+ </div>
283
+ </div>
284
+ </div>
285
+
286
+ <!-- If I Were Building This Today -->
287
+ <div class="process-step">
288
+ <div class="process-step-content">
289
+ <div class="process-step-header">
290
+ <div class="expertise-icon-container">
291
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
292
+ <circle cx="12" cy="12" r="10"/>
293
+ <line x1="12" y1="8" x2="12" y2="12"/>
294
+ <line x1="12" y1="16" x2="12.01" y2="16"/>
295
+ </svg>
296
+ </div>
297
+ <h3>If I Were Building This Today</h3>
298
+ </div>
299
+ <div class="process-step-content-body">
300
+ <p>If I were building a meditation content marketplace today, I would leverage AI to enhance several aspects of the platform:</p>
301
+
302
+ <h4 class="mt-md mb-sm">Creator Experience:</h4>
303
+ <ul class="service-list">
304
+ <li><strong>Automated Content Preparation</strong> - AI tools to help creators enhance audio quality, add appropriate music beds, and optimize their recordings</li>
305
+ <li><strong>Content Tagging Assistance</strong> - NLP systems to suggest appropriate tags and categories based on content analysis</li>
306
+ <li><strong>Performance Analytics</strong> - ML-powered analytics showing which content elements resonate most with users</li>
307
+ <li><strong>Voice Expansion</strong> - Tools to help creators offer their content in multiple languages using AI voice translation</li>
308
+ </ul>
309
+
310
+ <h4 class="mt-md mb-sm">Marketplace Intelligence:</h4>
311
+ <ul class="service-list">
312
+ <li><strong>Cross-Creator Recommendations</strong> - Sophisticated ML models to suggest content across different creators based on user preferences</li>
313
+ <li><strong>Content Gap Analysis</strong> - AI identification of underserved meditation topics or styles to guide creator content strategy</li>
314
+ <li><strong>Dynamic Pricing Optimization</strong> - ML-based price testing to maximize both creator revenue and user purchases</li>
315
+ <li><strong>Content Quality Verification</strong> - Automated systems to ensure consistent audio quality across all submissions</li>
316
+ </ul>
317
+
318
+ <h4 class="mt-md mb-sm">User Experience:</h4>
319
+ <ul class="service-list">
320
+ <li><strong>Personalized Content Bundles</strong> - AI-curated collections of content from multiple creators based on individual user needs</li>
321
+ <li><strong>Voice-Guided Exploration</strong> - Conversational AI to help users find exactly the right meditation through natural dialogue</li>
322
+ <li><strong>Effectiveness Tracking</strong> - Integration with health data to provide insights on how different meditations affect sleep, heart rate, etc.</li>
323
+ <li><strong>Adaptive Session Sequencing</strong> - AI-designed meditation programs that adapt based on user progress and feedback</li>
324
+ </ul>
325
+
326
+ <p class="mt-md">These AI-powered enhancements would transform a content marketplace into an intelligent wellness platform, creating more value for both creators and users while maintaining the core marketplace model that made Guided Mind successful.</p>
327
+ </div>
328
+ </div>
329
+ </div>
330
+
331
+ <!-- App Link -->
332
+ <div class="index-cta mt-xl">
333
+ <h3 class="mb-sm">See the project in action</h3>
334
+ <p class="mb-md">Download Guided Mind and experience the results firsthand.</p>
335
+ <div class="flex flex-wrap justify-center gap">
336
+ <a href="http://itunes.apple.com/app/id672076838?uo=5&at=1l3vcSo" class="cta-button">
337
+ Download on App Store
338
+ </a>
339
+ </div>
340
+ </div>
341
+
342
+ <!-- CTA for services -->
343
+ <div class="process-cta">
344
+ <h3>Need a multi-sided marketplace with AI capabilities?</h3>
345
+ <p>My experience building content marketplaces like Guided Mind has given me deep insights into connecting content creators with audiences. Now I'm focused on implementing AI technologies to make these connections even more powerful and personalized. Let's discuss how I can help with your next marketplace project.</p>
346
+ <a href="/contact" class="process-cta-button">Get in Touch</a>
347
+ </div>
348
+ {% endblock %}
349
+
350
+ {% block extra_js %}
351
+ <!-- No additional JavaScript needed for this case study -->
352
+ {% endblock %}
workspace/website/livewire.html ADDED
@@ -0,0 +1,325 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}WWOZ Livewire Case Study - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {# No extra_css needed as case-study styles should be in main.css #}
6
+
7
+ {% block content %}
8
+ <div class="back-navigation">
9
+ <a href="/portfolio" class="back-link">
10
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="back-arrow">
11
+ <path d="M19 12H5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
12
+ <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
13
+ </svg>
14
+ <span>Back to Portfolio</span>
15
+ </a>
16
+ </div>
17
+ <!-- Case Study Header with compact metadata -->
18
+ <div class="case-study-header">
19
+ <h1 class="page-title mb-md">Case Study: WWOZ Livewire</h1>
20
+
21
+ <!-- Title and description at the top -->
22
+ <div class="app-description">
23
+ <h2 class="app-title mb-sm">New Orleans Music Calendar</h2>
24
+ <p class="page-intro">Creating a mobile guide to live local music in and around New Orleans, featuring venue and artist information from WWOZ's music calendar.</p>
25
+ </div>
26
+
27
+ <!-- App icon and compact metadata grid in a row -->
28
+ <div class="metadata-container">
29
+ <!-- App icon on the left -->
30
+ <div class="app-icon-container">
31
+ <img src="/assets/images/livewire.png" alt="WWOZ Livewire Icon" class="app-icon">
32
+ </div>
33
+
34
+ <!-- Compact metadata grid to the right -->
35
+ <div class="project-metadata-grid">
36
+ <div class="metadata-column">
37
+ <div class="metadata-label">Client:</div>
38
+ <div class="metadata-value">WWOZ New Orleans</div>
39
+ </div>
40
+ <div class="metadata-column">
41
+ <div class="metadata-label">Platform:</div>
42
+ <div class="metadata-value">iOS</div>
43
+ </div>
44
+ <div class="metadata-column">
45
+ <div class="metadata-label">Timeline:</div>
46
+ <div class="metadata-value">3 months</div>
47
+ </div>
48
+ <div class="metadata-column">
49
+ <div class="metadata-label">Role:</div>
50
+ <div class="metadata-value">Lead Developer</div>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+
56
+ <!-- App Screenshots -->
57
+ <div class="mb-lg">
58
+ <h3 class="section-heading mb-md">Project Results</h3>
59
+ <div class="screenshots-grid">
60
+ <img src="/assets/images/iPhone_L_1.png" alt="Livewire screenshot" class="app-screenshot">
61
+ <img src="/assets/images/iPhone_L_2.png" alt="Livewire screenshot" class="app-screenshot">
62
+ <img src="/assets/images/iPhone_L_3.png" alt="Livewire screenshot" class="app-screenshot">
63
+ <img src="/assets/images/iPhone_L_4.png" alt="Livewire screenshot" class="app-screenshot">
64
+ </div>
65
+ </div>
66
+
67
+ <!-- The Challenge -->
68
+ <div class="process-step">
69
+ <div class="process-step-content">
70
+ <div class="process-step-header">
71
+ <div class="expertise-icon-container">
72
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
73
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
74
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
75
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
76
+ </svg>
77
+ </div>
78
+ <h3>The Challenge</h3>
79
+ </div>
80
+ <div class="process-step-content-body">
81
+ <p>WWOZ, a renowned community radio station in New Orleans, needed a mobile solution to share their extensive "Livewire Music Calendar" with local and visiting music enthusiasts. The project presented several key challenges:</p>
82
+ <ul class="service-list">
83
+ <li><strong>Dynamic data presentation</strong>: Finding intuitive ways to organize and display hundreds of daily music events across the city</li>
84
+ <li><strong>Complex information architecture</strong>: Creating relationships between venues, artists, and performances</li>
85
+ <li><strong>Local navigation needs</strong>: Helping users discover music in New Orleans' unique geography</li>
86
+ <li><strong>Offline functionality</strong>: Ensuring the app remained useful while tourists were exploring without reliable data connections</li>
87
+ <li><strong>Preserving the WWOZ brand</strong>: Maintaining the station's distinctive community-focused identity in a digital format</li>
88
+ </ul>
89
+ </div>
90
+ </div>
91
+ </div>
92
+
93
+ <!-- The Approach -->
94
+ <div class="process-step">
95
+ <div class="process-step-content">
96
+ <div class="process-step-header">
97
+ <div class="expertise-icon-container">
98
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
99
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
100
+ </svg>
101
+ </div>
102
+ <h3>My Approach</h3>
103
+ </div>
104
+ <div class="process-step-content-body">
105
+ <p>After collaborative discovery sessions with the WWOZ team, I developed a user-centered approach focused on both tourists and locals:</p>
106
+ <h4 class="mt-md mb-sm">Experience Design:</h4>
107
+ <ul class="service-list">
108
+ <li><strong>Time-based navigation</strong>: Prioritizing "today's music" as the primary entry point for users</li>
109
+ <li><strong>Dual discovery paths</strong>: Allowing users to browse both by venue and by performer</li>
110
+ <li><strong>User preference tracking</strong>: Enabling users to follow favorite acts and learn about upcoming performances</li>
111
+ <li><strong>Rich content integration</strong>: Incorporating videos, social media links, and artist information</li>
112
+ </ul>
113
+ <h4 class="mt-md mb-sm">Development Approach:</h4>
114
+ <p>I leveraged a rapid development methodology with frequent stakeholder feedback loops to ensure the app met both user and client expectations:</p>
115
+ <ul class="service-list">
116
+ <li><strong>API-first implementation</strong>: Building a robust communication layer with WWOZ's calendar system</li>
117
+ <li><strong>Offline caching strategy</strong>: Designing a system that would store recent queries for offline use</li>
118
+ <li><strong>Performance optimization</strong>: Ensuring smooth scrolling and transitions despite large dataset</li>
119
+ <li><strong>Collaborative UI design</strong>: Working with WWOZ's designer to create an interface that felt true to the brand</li>
120
+ </ul>
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+ <!-- Technical Implementation -->
126
+ <div class="process-step">
127
+ <div class="process-step-content">
128
+ <div class="process-step-header">
129
+ <div class="expertise-icon-container">
130
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
131
+ <path d="M16 18l6-6-6-6"/>
132
+ <path d="M8 6l-6 6 6 6"/>
133
+ </svg>
134
+ </div>
135
+ <h3>Technical Implementation</h3>
136
+ </div>
137
+ <div class="process-step-content-body">
138
+ <p>Developing the WWOZ Livewire app required several technical solutions to address the project's unique requirements:</p>
139
+ <h4 class="mt-md mb-sm">iOS Native Development:</h4>
140
+ <p>I built a native iOS application to ensure the best possible performance and user experience:</p>
141
+ <ul class="service-list">
142
+ <li><strong>Custom calendar interface</strong> optimized for music events</li>
143
+ <li><strong>Location-aware venue discovery</strong> using CoreLocation</li>
144
+ <li><strong>Efficient caching system</strong> for offline browsing</li>
145
+ <li><strong>Dynamic list management</strong> for handling large datasets smoothly</li>
146
+ <li><strong>Optimized image handling</strong> for artist and venue photos</li>
147
+ </ul>
148
+ <h4 class="mt-md mb-sm">High-Performance Map Clustering:</h4>
149
+ <p>Rendering hundreds of venue pins on a map presented a significant performance challenge that required a custom solution:</p>
150
+ <ul class="service-list">
151
+ <li><strong>QuadTree clustering algorithm</strong> implemented from scratch to efficiently manage dense pin rendering</li>
152
+ <li><strong>Dynamic annotation grouping</strong> that clusters nearby venues at higher zoom levels</li>
153
+ <li><strong>Performance optimization</strong> enabling smooth map interaction despite large dataset</li>
154
+ <li><strong>Intuitive zoom behavior</strong> providing clear visual feedback as users explore New Orleans</li>
155
+ </ul>
156
+ <h4 class="mt-md mb-sm">Data Architecture:</h4>
157
+ <p>The app's data structure was carefully designed to handle the complex relationships between events, venues, and artists:</p>
158
+ <ul class="service-list">
159
+ <li><strong>Real-time API integration</strong> with WWOZ's events database</li>
160
+ <li><strong>Intelligent caching layer</strong> for both performance and offline access</li>
161
+ <li><strong>Custom search indexing</strong> for quick lookup by various criteria</li>
162
+ <li><strong>Favorite synchronization</strong> across app sessions</li>
163
+ </ul>
164
+ <h4 class="mt-md mb-sm">Media Integration:</h4>
165
+ <p>A key feature was connecting users with artists' content beyond just event listings:</p>
166
+ <ul class="service-list">
167
+ <li><strong>YouTube video integration</strong> for artist performances</li>
168
+ <li><strong>Social media profile linking</strong> to connect with artists</li>
169
+ <li><strong>Website deep linking</strong> for venues and performers</li>
170
+ </ul>
171
+ <h4 class="mt-md mb-sm">Technologies Used:</h4>
172
+ <ul class="service-list">
173
+ <li>Objective-C and UIKit for iOS development</li>
174
+ <li>REST API integration with caching layer</li>
175
+ <li>CoreLocation for mapping and proximity features</li>
176
+ <li>YouTube Player integration</li>
177
+ <li>Custom persistence layer for favorites</li>
178
+ </ul>
179
+ </div>
180
+ </div>
181
+ </div>
182
+
183
+ <!-- Results & Impact -->
184
+ <div class="process-step">
185
+ <div class="process-step-content">
186
+ <div class="process-step-header">
187
+ <div class="expertise-icon-container">
188
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
189
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
190
+ <polyline points="22 4 12 14.01 9 11.01"/>
191
+ </svg>
192
+ </div>
193
+ <h3>Results & Impact</h3>
194
+ </div>
195
+ <div class="process-step-content-body">
196
+ <p>The WWOZ Livewire app successfully transformed how people discover live music in New Orleans:</p>
197
+
198
+ <!-- Key Metrics -->
199
+ <div class="about-stats mt-md">
200
+ <div class="stat-item">
201
+ <div class="stat-number">18K+</div>
202
+ <div class="stat-label">App installations</div>
203
+ </div>
204
+ <div class="stat-item">
205
+ <div class="stat-number">100+</div>
206
+ <div class="stat-label">Venues featured</div>
207
+ </div>
208
+ <div class="stat-item">
209
+ <div class="stat-number">4.5</div>
210
+ <div class="stat-label">App Store rating</div>
211
+ </div>
212
+ </div>
213
+
214
+ <p class="mt-md">For music venues and artists, the platform provided significant benefits:</p>
215
+ <ul class="service-list">
216
+ <li><strong>Increased visibility</strong> for smaller venues and up-and-coming artists</li>
217
+ <li><strong>Greater attendance</strong> at local music events, particularly from tourists</li>
218
+ <li><strong>Direct connection</strong> between performers and new audiences</li>
219
+ <li><strong>Promotion of New Orleans' rich musical heritage</strong> through a digital medium</li>
220
+ </ul>
221
+
222
+ <p>For WWOZ, the app represented a successful extension of their mission:</p>
223
+ <ul class="service-list">
224
+ <li>Modernized their brand while maintaining their community focus</li>
225
+ <li>Expanded their reach beyond radio listeners to app users</li>
226
+ <li>Strengthened their position as the definitive source for New Orleans music information</li>
227
+ <li>Created a new digital touchpoint with their audience</li>
228
+ </ul>
229
+
230
+ <div class="testimonial">
231
+ <div class="testimonial-content">"The Livewire app has been a game-changer for how visitors and locals alike discover live music in New Orleans. It puts the entire scene at their fingertips in a way that's true to the spontaneous, vibrant nature of our musical culture."</div>
232
+ <div class="testimonial-author">— WWOZ Station Representative</div>
233
+ </div>
234
+ </div>
235
+ </div>
236
+ </div>
237
+
238
+ <!-- Key Learnings -->
239
+ <div class="process-step">
240
+ <div class="process-step-content">
241
+ <div class="process-step-header">
242
+ <div class="expertise-icon-container">
243
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
244
+ <path d="M18 8h1a4 4 0 0 1 0 8h-1"/>
245
+ <path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"/>
246
+ <line x1="6" y1="1" x2="6" y2="4"/>
247
+ <line x1="10" y1="1" x2="10" y2="4"/>
248
+ <line x1="14" y1="1" x2="14" y2="4"/>
249
+ </svg>
250
+ </div>
251
+ <h3>Key Learnings</h3>
252
+ </div>
253
+ <div class="process-step-content-body">
254
+ <p>This project provided valuable insights into developing location-based event apps:</p>
255
+ <h4 class="mt-md mb-sm">User Experience Insights:</h4>
256
+ <ul class="service-list">
257
+ <li><strong>Contextual relevance is crucial</strong> - Users primarily wanted to know "what's happening tonight near me"</li>
258
+ <li><strong>Multiple discovery paths</strong> - Different user groups (tourists vs. locals, venue-focused vs. artist-focused) needed different navigation options</li>
259
+ <li><strong>Offline functionality matters</strong> - Visitors with limited data plans or in areas with poor reception still needed access to information</li>
260
+ <li><strong>Simplicity wins</strong> - Despite the complex data relationships, the interface needed to remain straightforward</li>
261
+ </ul>
262
+ <h4 class="mt-md mb-sm">Technical Learnings:</h4>
263
+ <ul class="service-list">
264
+ <li><strong>Data optimization is essential</strong> - Event apps require careful consideration of how to structure and cache data</li>
265
+ <li><strong>Location services add complexity</strong> - Map integration and geolocation features required additional performance considerations</li>
266
+ <li><strong>Content freshness balance</strong> - Finding the right balance between real-time updates and cached content</li>
267
+ <li><strong>Media integration tradeoffs</strong> - Incorporating rich media while maintaining performance required careful implementation</li>
268
+ </ul>
269
+ <p>These learnings have informed my approach to subsequent event and location-based applications, particularly in how I structure data and create contextually relevant user experiences.</p>
270
+ </div>
271
+ </div>
272
+ </div>
273
+
274
+ <!-- If I Were Building This Today Section -->
275
+ <div class="process-step">
276
+ <div class="process-step-content">
277
+ <div class="process-step-header">
278
+ <div class="expertise-icon-container">
279
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
280
+ <circle cx="12" cy="12" r="10"/>
281
+ <line x1="12" y1="8" x2="12" y2="12"/>
282
+ <line x1="12" y1="16" x2="12.01" y2="16"/>
283
+ </svg>
284
+ </div>
285
+ <h3>If I Were Building This Today</h3>
286
+ </div>
287
+ <div class="process-step-content-body">
288
+ <p>If I were developing the WWOZ Livewire app today, I would leverage several AI capabilities to significantly enhance the user experience:</p>
289
+ <h4 class="mt-md mb-sm">Personalized Recommendations:</h4>
290
+ <ul class="service-list">
291
+ <li><strong>Music Taste Prediction</strong> - Using machine learning to analyze user behavior and suggest events based on their musical preferences</li>
292
+ <li><strong>Smart Itinerary Creation</strong> - AI-powered tools to build optimized music crawls based on location, timing, and preferences</li>
293
+ <li><strong>Sentiment Analysis</strong> - Processing reviews and social media to highlight events generating the most positive buzz</li>
294
+ <li><strong>Personalized Notifications</strong> - ML models that learn when and how often to notify users about relevant events</li>
295
+ </ul>
296
+ <h4 class="mt-md mb-sm">Enhanced Discovery:</h4>
297
+ <ul class="service-list">
298
+ <li><strong>Music Style Classification</strong> - Automatically categorizing artists by genre and style based on audio samples and descriptions</li>
299
+ <li><strong>Similar Artist Suggestions</strong> - "If you like this artist, you might also enjoy..." recommendations</li>
300
+ <li><strong>Natural Language Search</strong> - Conversational interfaces to find events (e.g., "Find me jazz near Frenchmen Street tomorrow night")</li>
301
+ <li><strong>Image Recognition</strong> - Using venue photos to understand the atmosphere and match to user preferences</li>
302
+ </ul>
303
+ <h4 class="mt-md mb-sm">Content Enrichment:</h4>
304
+ <ul class="service-list">
305
+ <li><strong>Automated Artist Profiles</strong> - Using AI to gather and synthesize information about performers from across the web</li>
306
+ <li><strong>Music Preview Generation</strong> - Creating brief audio previews of an artist's style using generative AI</li>
307
+ <li><strong>Automated Event Summaries</strong> - Generating concise descriptions of events based on venue, performer, and historical data</li>
308
+ <li><strong>Cross-Platform Content Aggregation</strong> - Automatically collecting and featuring artist videos, reviews, and social media content</li>
309
+ </ul>
310
+ <p class="mt-md">These AI enhancements would transform what was initially a digital event calendar into an intelligent music concierge that understands each user's unique preferences and helps them discover exactly the right musical experiences in New Orleans. The technology would amplify the human element rather than replace it—making it easier for people to connect with the authentic cultural experiences the city has to offer.</p>
311
+ </div>
312
+ </div>
313
+ </div>
314
+
315
+ <!-- CTA for services -->
316
+ <div class="process-cta">
317
+ <h3>Need a location-based or event discovery application?</h3>
318
+ <p>My experience creating intuitive event discovery apps like WWOZ Livewire has given me deep insights into developing location-aware applications that connect users with local experiences. Now I'm focused on implementing AI technologies to make these connections even more personalized and intelligent. Let's discuss how I can help with your next project.</p>
319
+ <a href="/contact" class="process-cta-button">Get in Touch</a>
320
+ </div>
321
+ {% endblock %}
322
+
323
+ {% block extra_js %}
324
+ <!-- No additional JavaScript needed for this case study -->
325
+ {% endblock %}
workspace/website/llm-evaluation-prompting.html ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}LLM Evaluation & Prompt Engineering Case Study - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {# No extra_css needed as case-study styles should be in main.css #}
6
+
7
+ {% block content %}
8
+ <div class="back-navigation">
9
+ <a href="/portfolio" class="back-link">
10
+ <svg width="18" height="18" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" class="back-arrow">
11
+ <path d="M19 12H5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
12
+ <path d="M12 19L5 12L12 5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
13
+ </svg>
14
+ <span>Back to Portfolio</span>
15
+ </a>
16
+ </div>
17
+
18
+ <!-- Case Study Header -->
19
+ <div class="case-study-header">
20
+ <h1 class="page-title mb-md">Case Study: Building and Refining an LLM Evaluation System</h1>
21
+
22
+ <!-- Title and description at the top -->
23
+ <div class="app-description">
24
+ <h2 class="app-title mb-sm">Navigating MMLU Benchmarking Challenges</h2>
25
+ <p class="page-intro">An internal R&D project focused on developing a custom framework for evaluating Large Language Models (LLMs) against the MMLU benchmark, and subsequently investigating the complexities of prompt engineering and results reproducibility.</p>
26
+ </div>
27
+
28
+ <!-- Visual (Placeholder or relevant chart/diagram) -->
29
+ <div class="mb-lg text-center"> {# Center the visual #}
30
+ <img src="/assets/images/prompt-programming.svg" alt="DSPy Optimization Process Animation" style="max-width: 100%; height: 15rem; margin: auto; border-radius: var(--radius-md); box-shadow: var(--shadow-md);">
31
+ {# Consider adding a caption if needed #}
32
+ </div>
33
+
34
+ <!-- Metadata Grid -->
35
+ <div class="metadata-container">
36
+ <!-- Placeholder Icon -->
37
+ <div class="app-icon-container">
38
+ <img src="/assets/images/guage.svg" alt="Evaluation icon" class="app-icon">
39
+ </div>
40
+
41
+ <!-- Compact metadata grid -->
42
+ <div class="project-metadata-grid">
43
+ <div class="metadata-column">
44
+ <div class="metadata-label">Project Type:</div>
45
+ <div class="metadata-value">Internal R&D / AI Engineering</div>
46
+ </div>
47
+ <div class="metadata-column">
48
+ <div class="metadata-label">Technology Focus:</div>
49
+ <div class="metadata-value">LLM Evaluation, Prompt Engineering</div>
50
+ </div>
51
+ <div class="metadata-column">
52
+ <div class="metadata-label">Core Tools:</div>
53
+ <div class="metadata-value">Python, Hugging Face, PyTorch</div>
54
+ </div>
55
+ <div class="metadata-column">
56
+ <div class="metadata-label">Model/Benchmark:</div>
57
+ <div class="metadata-value">Llama 3.1 8B / MMLU</div>
58
+ </div>
59
+ </div>
60
+ </div>
61
+ </div>
62
+
63
+ <!-- The Challenge -->
64
+ <div class="process-step">
65
+ <div class="process-step-content">
66
+ <div class="process-step-header">
67
+ <div class="expertise-icon-container">
68
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
69
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
70
+ <path d="M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"/>
71
+ <line x1="12" y1="17" x2="12.01" y2="17"/>
72
+ </svg>
73
+ </div>
74
+ <h3>The Challenge</h3>
75
+ </div>
76
+ <div class="process-step-content-body">
77
+ <p>Accurately evaluating and comparing Large Language Models (LLMs) is crucial for selecting the right tool for a given task, yet it presents significant practical challenges. Standard benchmarks like MMLU exist, but simply running a model isn't enough.</p>
78
+ <p>This project initially aimed to gain hands-on experience by building a functional evaluation framework capable of running models like Llama 3.1 8B against the MMLU benchmark. However, upon achieving initial results (67.0 macro average), a new challenge emerged: the score was substantially lower than Meta's published 73.0 score.</p>
79
+ <p>This discrepancy highlighted several key difficulties:</p>
80
+ <ul class="service-list">
81
+ <li>The need for a robust, flexible framework to conduct evaluations systematically.</li>
82
+ <li>The sensitivity of LLM performance to subtle variations in prompting and evaluation methodology.</li>
83
+ <li>The difficulty in exactly reproducing published benchmark scores due to potential differences in implementation details.</li>
84
+ <li>Understanding the factors that influence benchmark results beyond the model itself.</li>
85
+ </ul>
86
+ </div>
87
+ </div>
88
+ </div>
89
+
90
+ <!-- My Approach / Solution -->
91
+ <div class="process-step">
92
+ <div class="process-step-content">
93
+ <div class="process-step-header">
94
+ <div class="expertise-icon-container">
95
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
96
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
97
+ </svg>
98
+ </div>
99
+ <h3>My Approach / Solution</h3>
100
+ </div>
101
+ <div class="process-step-content-body">
102
+ <p>The project proceeded in two main phases:</p>
103
+
104
+ <h4 class="mt-md mb-sm">Phase 1: Evaluation Framework Development</h4>
105
+ <ul class="service-list">
106
+ <li><strong>Design:</strong> Developed a Python-based evaluation framework using an orchestrator pattern to handle benchmark-specific logic (starting with MMLU).</li>
107
+ <li><strong>Technology Stack:</strong> Utilized Hugging Face Hub for model/tokenizer access, Transformers for inference, and PyTorch for calculations. Google Colab (A100/L4 GPU) was used for execution.</li>
108
+ <li><strong>Core Functionality:</strong> Implemented logic for loading benchmarks, formatting prompts (initially 0-shot), running model inference, extracting probabilities via logits (constrained decoding), and calculating accuracy scores.</li>
109
+ <li><strong>Initial Run:</strong> Successfully ran Llama 3.1 8B Instruct on MMLU, establishing a baseline score.</li>
110
+ </ul>
111
+
112
+ <h4 class="mt-md mb-sm">Phase 2: Discrepancy Investigation & Prompt Refinement</h4>
113
+ <ul class="service-list">
114
+ <li><strong>Framework Refinement:</strong> Refactored the framework to easily configure and test different prompt structures, moving away from hardcoded prompts.</li>
115
+ <li><strong>Systematic Prompt Testing:</strong> Evaluated several prompt variations:
116
+ <ul>
117
+ <li>A basic instructional prompt.</li>
118
+ <li>A chat-template based prompt inspired by recent research.</li>
119
+ <li>A prompt designed to mimic the "original MMLU prompt" structure.</li>
120
+ </ul>
121
+ </li>
122
+ <li><strong>Evaluation Method Consideration:</strong> Investigated potential differences between constrained decoding (logit-based) and open-ended generation, based on descriptions in Meta's documentation.</li>
123
+ <li><strong>Analysis:</strong> Compared the scores produced by different prompts to understand sensitivity and identify more effective structures.</li>
124
+ </ul>
125
+ </div>
126
+ </div>
127
+ </div>
128
+
129
+
130
+ <!-- Results & Impact -->
131
+ <div class="process-step">
132
+ <div class="process-step-content">
133
+ <div class="process-step-header">
134
+ <div class="expertise-icon-container">
135
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
136
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
137
+ <polyline points="22 4 12 14.01 9 11.01"/>
138
+ </svg>
139
+ </div>
140
+ <h3>Results & Impact</h3>
141
+ </div>
142
+ <div class="process-step-content-body">
143
+ <p>This two-phased project yielded both a functional tool and critical insights:</p>
144
+
145
+ <!-- Key Metrics/Findings -->
146
+ <div class="about-stats mt-md mb-lg">
147
+ <div class="stat-item">
148
+ <div class="stat-number">✓</div>
149
+ <div class="stat-label">Functional Evaluation Framework Built</div>
150
+ </div>
151
+ <div class="stat-item">
152
+ <div class="stat-number">67.0%</div>
153
+ <div class="stat-label">Initial MMLU Score (Macro Avg)</div>
154
+ </div>
155
+ <div class="stat-item" style="background-color: var(--secondary-light);">
156
+ <div class="stat-number" style="color: var(--secondary);">68.3%</div>
157
+ <div class="stat-label">Improved Score via Prompt Tuning</div>
158
+ </div>
159
+ </div>
160
+
161
+ <p>Key outcomes and impacts:</p>
162
+ <ul class="service-list">
163
+ <li><strong>Framework Capability:</strong> Successfully developed a reusable framework for benchmarking LLMs.</li>
164
+ <li><strong>Prompt Sensitivity Demonstrated:</strong> Testing revealed significant variations in MMLU scores based solely on prompt structure (ranging from 61.0% to 68.3%), underscoring the critical nature of prompt engineering.</li>
165
+ <li><strong>Improved Baseline:</strong> Identified a more effective prompt ("original MMLU" structure) that improved the score from 67.0% to 68.3%.</li>
166
+ <li><strong>Reproducibility Insights:</strong> While the published 73.0% score wasn't exactly matched, the investigation highlighted the likely role of subtle, undocumented implementation details (specific prompt nuances, exact generation strategy) in achieving top benchmark scores.</li>
167
+ <li><strong>Enhanced Expertise:</strong> Gained deep practical understanding of the complexities involved in LLM evaluation, going beyond surface-level execution.</li>
168
+ </ul>
169
+ <p>This project serves as a practical demonstration of the meticulous approach required for reliable LLM evaluation and the significant impact of careful prompt design.</p>
170
+ </div>
171
+ </div>
172
+ </div>
173
+
174
+ <!-- Key Learnings -->
175
+ <div class="process-step">
176
+ <div class="process-step-content">
177
+ <div class="process-step-header">
178
+ <div class="expertise-icon-container">
179
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
180
+ <path d="M18 8h1a4 4 0 0 1 0 8h-1"/>
181
+ <path d="M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z"/>
182
+ <line x1="6" y1="1" x2="6" y2="4"/>
183
+ <line x1="10" y1="1" x2="10" y2="4"/>
184
+ <line x1="14" y1="1" x2="14" y2="4"/>
185
+ </svg>
186
+ </div>
187
+ <h3>Key Learnings</h3>
188
+ </div>
189
+ <div class="process-step-content-body">
190
+ <p>This project reinforced several important principles for working with LLMs:</p>
191
+ <ul class="service-list">
192
+ <li><strong>Evaluation is Foundational:</strong> Building reliable systems requires the ability to measure performance systematically. Custom frameworks can provide necessary control and flexibility.</li>
193
+ <li><strong>Prompts Matter Immensely:</strong> LLM performance is highly sensitive to prompt structure and wording. Effective prompt engineering is crucial but can be complex.</li>
194
+ <li><strong>Reproducibility is Hard:</strong> Exactly matching published benchmark scores can be challenging due to subtle, often undocumented, differences in evaluation setup and prompting strategies.</li>
195
+ <li><strong>Look Under the Hood:</strong> Never blindly trust default templates or assumptions. Understanding the exact input being sent to the model is critical for debugging and optimization.</li>
196
+ <li><strong>Focus on Relative Performance:</strong> While striving for accuracy is important, comparing models or prompts <em>within the same consistent evaluation framework</em> often provides more actionable insights than chasing exact published scores.</li>
197
+ </ul>
198
+ </div>
199
+ </div>
200
+ </div>
201
+
202
+ <!-- Applying This to Client Solutions -->
203
+ <div class="process-step">
204
+ <div class="process-step-content">
205
+ <div class="process-step-header">
206
+ <div class="expertise-icon-container">
207
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
208
+ <line x1="12" y1="5" x2="12" y2="19"></line>
209
+ <polyline points="19 12 12 19 5 12"></polyline>
210
+ </svg>
211
+ </div>
212
+ <h3>Applying This to Client Solutions</h3>
213
+ </div>
214
+ <div class="process-step-content-body">
215
+ <p>The experience gained from building this evaluation framework and investigating benchmark discrepancies directly translates into value for client projects:</p>
216
+ <ul class="service-list">
217
+ <li><strong>Rigorous Model Selection:</strong> Ability to set up custom evaluations to compare different models (commercial or open-source) specifically on data relevant to the <em>client's</em> task, not just generic benchmarks.</li>
218
+ <li><strong>Informed Prompt Engineering:</strong> Deep understanding of how prompt structure impacts performance, leading to more effective and reliable prompts for client applications.</li>
219
+ <li><strong>Realistic Expectations:</strong> Ability to advise clients on the achievable performance and the inherent variability in LLM results, setting realistic project goals.</li>
220
+ <li><strong>Troubleshooting Expertise:</strong> Experience in diagnosing performance issues related to prompts or evaluation setup.</li>
221
+ <li><strong>Focus on Business Value:</strong> While benchmarks are useful, the ultimate goal is building solutions that solve real business problems. This experience reinforces the need to define and measure success based on client-specific metrics.</li>
222
+ </ul>
223
+ </div>
224
+ </div>
225
+ </div>
226
+
227
+ <!-- CTA for services -->
228
+ <div class="process-cta">
229
+ <h3>Need help evaluating or optimizing AI for your business?</h3>
230
+ <p>Choosing the right LLM and crafting effective prompts requires careful testing and a deep understanding of how these models work. My experience in building evaluation systems and navigating benchmarking complexities can help ensure your AI solution is built on a solid, well-understood foundation.</p>
231
+ <a href="/contact" class="process-cta-button">Discuss Your Evaluation Needs</a>
232
+ </div>
233
+ {% endblock %}
234
+
235
+ {% block extra_js %}
236
+ <!-- No additional JavaScript needed for this case study -->
237
+ {% endblock %}
workspace/website/portfolio.html ADDED
@@ -0,0 +1,258 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}Portfolio - Charles Feinn // AppSimple{% endblock %} {# Updated Title #}
4
+
5
+ {% block extra_css %}
6
+ <link rel="stylesheet" href="/assets/css/pages/portfolio.css" />
7
+ {% endblock %}
8
+
9
+ {% block content %}
10
+ <!-- Portfolio Section -->
11
+ <h1 class="page-title">Portfolio</h1>
12
+ <p class="page-intro">My work spans across mobile application development and applied AI solutions. Below you'll find a collection of projects that showcase my technical expertise and problem-solving approach across different domains.</p>
13
+
14
+ <!-- Portfolio Filter -->
15
+ <div class="portfolio-filter">
16
+ <button class="filter-button active" data-filter="all">All Projects</button>
17
+ <button class="filter-button" data-filter="mobile">Mobile Apps</button>
18
+ <button class="filter-button" data-filter="ai">AI Engineering</button> {# Changed label slightly #}
19
+ <button class="filter-button" data-filter="hybrid">Hybrid Projects</button>
20
+ </div>
21
+
22
+ <!-- Portfolio Grid -->
23
+ <div class="portfolio-grid">
24
+
25
+ <!-- FOT Intervention Recommender -->
26
+ <div class="portfolio-item" data-categories="ai hybrid">
27
+ <div class="portfolio-card">
28
+ <div class="portfolio-image">
29
+ <div class="placeholder-icon" style="font-size: 1.5rem; font-weight: 600;">FOT</div>
30
+ </div>
31
+ <div class="portfolio-content">
32
+ <h3>Freshman On-Track Recommender</h3>
33
+ <p class="portfolio-type">AI Engineering / EdTech</p>
34
+ <p class="portfolio-description">
35
+ A high-quality RAG system that transforms student narratives into evidence-based intervention recommendations for educators.
36
+ </p>
37
+ <div class="portfolio-tags">
38
+ <span class="tag">RAG</span>
39
+ <span class="tag">Python</span>
40
+ <span class="tag">Gemini</span>
41
+ <span class="tag">FAISS</span>
42
+ </div>
43
+ <a href="/portfolio/fot-recommender" class="portfolio-link">View Case Study</a>
44
+ </div>
45
+ </div>
46
+ </div>
47
+
48
+ <!-- ASimpleAuthKit -->
49
+ <div class="portfolio-item" data-categories="mobile">
50
+ <div class="portfolio-card">
51
+ <div class="portfolio-image">
52
+ <div class="placeholder-icon" style="font-size: 1.5rem; font-weight: 600;">Auth</div>
53
+ </div>
54
+ <div class="portfolio-content">
55
+ <h3>ASimpleAuthKit</h3>
56
+ <p class="portfolio-type">Mobile App / Swift Package</p>
57
+ <p class="portfolio-description">
58
+ A production-ready Swift Package to streamline Firebase Authentication in SwiftUI apps.
59
+ </p>
60
+ <div class="portfolio-tags">
61
+ <span class="tag">Swift</span>
62
+ <span class="tag">SwiftUI</span>
63
+ <span class="tag">Firebase</span>
64
+ <span class="tag">API Design</span>
65
+ </div>
66
+ <a href="/portfolio/a-simple-auth-kit" class="portfolio-link">View Case Study</a>
67
+ </div>
68
+
69
+ </div>
70
+ </div>
71
+
72
+ <!-- DSPy Prompt Optimization -->
73
+ <div class="portfolio-item" data-categories="ai hybrid">
74
+ <div class="portfolio-card">
75
+ <div class="app-icon-container">
76
+ <img src="/assets/images/dspy_logo.png" alt="DSPy Logo" class="app-icon">
77
+ </div>
78
+ <div class="portfolio-content">
79
+ <h3>Automating LLM Prompt Optimization</h3>
80
+ <p class="portfolio-type">AI Engineering / LLM Optimization</p>
81
+ <p class="portfolio-description">Using the DSPy framework to programmatically optimize prompts, significantly improving Llama 3.1 8B performance on the MMLU benchmark over manual methods.</p>
82
+ <div class="portfolio-tags">
83
+ <span class="tag">DSPy</span>
84
+ <span class="tag">Prompt Optimization</span>
85
+ <span class="tag">LLM Evaluation</span>
86
+ <span class="tag">Automation</span>
87
+ </div>
88
+ <a href="/portfolio/dspy-prompt-optimization" class="portfolio-link">View Case Study</a>
89
+ </div>
90
+ </div>
91
+ </div>
92
+
93
+ <!-- LLM Evaluation & Prompting -->
94
+ <div class="portfolio-item" data-categories="ai hybrid">
95
+ <div class="portfolio-card">
96
+ <div class="portfolio-image">
97
+ <div class="placeholder-icon" style="font-size: 1.5rem; font-weight: 600;">Eval</div>
98
+ </div>
99
+ <div class="portfolio-content">
100
+ <h3>Building & Refining an LLM Evaluation System</h3>
101
+ <p class="portfolio-type">AI Engineering / LLM Evaluation</p>
102
+ <p class="portfolio-description">Developed a custom framework for MMLU benchmarking and investigated the critical impact of prompt engineering on LLM evaluation reproducibility.</p>
103
+ <div class="portfolio-tags">
104
+ <span class="tag">LLM Evaluation</span>
105
+ <span class="tag">Benchmarking</span>
106
+ <span class="tag">Prompt Engineering</span>
107
+ <span class="tag">Python</span>
108
+ </div>
109
+ <a href="/portfolio/llm-evaluation-prompting" class="portfolio-link">View Case Study</a>
110
+ </div>
111
+ </div>
112
+ </div>
113
+
114
+ <!-- Bodhi Mind -->
115
+ <div class="portfolio-item" data-categories="mobile">
116
+ <div class="portfolio-card">
117
+ <div class="portfolio-image">
118
+ <img src="/assets/images/bodhiMind.png" alt="Bodhi Mind App" class="portfolio-icon">
119
+ </div>
120
+ <div class="portfolio-content">
121
+ <h3>Bodhi Mind</h3>
122
+ <p class="portfolio-type">Mobile App Development</p>
123
+ <p class="portfolio-description">Subscription-based meditation content platform with intelligent content organization for iOS.</p>
124
+ <div class="portfolio-tags">
125
+ <span class="tag">iOS</span>
126
+ <span class="tag">Content Platform</span>
127
+ <span class="tag">Subscription</span>
128
+ </div>
129
+ <a href="/portfolio/bodhimind" class="portfolio-link">View Case Study</a>
130
+ </div>
131
+ </div>
132
+ </div>
133
+
134
+ <!-- Guided Mind -->
135
+ <div class="portfolio-item" data-categories="mobile">
136
+ <div class="portfolio-card">
137
+ <div class="portfolio-image">
138
+ <img src="/assets/images/guidedMind.png" alt="Guided Mind App" class="portfolio-icon">
139
+ </div>
140
+ <div class="portfolio-content">
141
+ <h3>Guided Mind</h3>
142
+ <p class="portfolio-type">Mobile App Development</p>
143
+ <p class="portfolio-description">Meditation content marketplace connecting multiple teachers with users across iOS and Android.</p>
144
+ <div class="portfolio-tags">
145
+ <span class="tag">iOS</span>
146
+ <span class="tag">Android</span>
147
+ <span class="tag">Marketplace</span>
148
+ </div>
149
+ <a href="/portfolio/guidedmind" class="portfolio-link">View Case Study</a>
150
+ </div>
151
+ </div>
152
+ </div>
153
+
154
+ <!-- Livewire -->
155
+ <div class="portfolio-item" data-categories="mobile">
156
+ <div class="portfolio-card">
157
+ <div class="portfolio-image">
158
+ <img src="/assets/images/livewire.png" alt="WWOZ Livewire App" class="portfolio-icon">
159
+ </div>
160
+ <div class="portfolio-content">
161
+ <h3>WWOZ Livewire</h3>
162
+ <p class="portfolio-type">Mobile App Development</p>
163
+ <p class="portfolio-description">New Orleans music calendar app with custom QuadTree clustering to efficiently visualize hundreds of live music venues on an interactive map.</p>
164
+ <div class="portfolio-tags">
165
+ <span class="tag">iOS</span>
166
+ <span class="tag">Calendar</span>
167
+ <span class="tag">Local Events</span>
168
+ </div>
169
+ <a href="/portfolio/livewire" class="portfolio-link">View Case Study</a>
170
+ </div>
171
+ </div>
172
+ </div>
173
+
174
+ </div> <!-- End Portfolio Grid -->
175
+
176
+
177
+ <!-- Hybrid Capabilities Section -->
178
+ <h2 class="section-heading">Combining Mobile Development & Applied AI</h2>
179
+ <p class="section-intro">My background in creating intuitive mobile applications combined with expertise in developing applied AI solutions allows me to deliver unique value through solutions that integrate both domains:</p>
180
+
181
+ <div class="hybrid-capabilities">
182
+ <div class="hybrid-capability">
183
+ <div class="expertise-icon-container">
184
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
185
+ <rect x="2" y="3" width="20" height="14" rx="2" ry="2"></rect>
186
+ <line x1="8" y1="21" x2="16" y2="21"></line>
187
+ <line x1="12" y1="17" x2="12" y2="21"></line>
188
+ </svg>
189
+ </div>
190
+ <div class="hybrid-content">
191
+ <h4>Mobile Apps with AI Capabilities</h4>
192
+ <p>Designing and building mobile applications that leverage AI for enhanced personalization, content recommendations, and user experience.</p>
193
+ </div>
194
+ </div>
195
+
196
+ <div class="hybrid-capability">
197
+ <div class="expertise-icon-container">
198
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
199
+ <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"></path>
200
+ <polyline points="22 4 12 14.01 9 11.01"></polyline>
201
+ </svg>
202
+ </div>
203
+ <div class="hybrid-content">
204
+ <h4>AI-Powered Business Tools</h4>
205
+ <p>Creating specialized business applications that combine intuitive mobile interfaces with powerful AI processing capabilities.</p>
206
+ </div>
207
+ </div>
208
+
209
+ <div class="hybrid-capability">
210
+ <div class="expertise-icon-container">
211
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
212
+ <path d="M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3"></path>
213
+ </svg>
214
+ </div>
215
+ <div class="hybrid-content">
216
+ <h4>Enhanced User Experiences</h4>
217
+ <p>Developing solutions that use AI to create more intelligent, responsive, and personalized mobile experiences.</p>
218
+ </div>
219
+ </div>
220
+ </div>
221
+
222
+ <!-- Portfolio CTA -->
223
+ <div class="process-cta">
224
+ <h3>Looking for mobile, AI, or hybrid solutions?</h3>
225
+ <p>Whether you need a mobile application, an AI-powered solution, or a solution that combines both, let's discuss how my experience can help bring your project to life.</p>
226
+ <a href="/contact" class="process-cta-button">Start a Conversation</a>
227
+ </div>
228
+ {% endblock %}
229
+
230
+ {% block extra_js %}
231
+ <script>
232
+ // Portfolio Filtering Logic
233
+ document.addEventListener('DOMContentLoaded', function() {
234
+ const filterButtons = document.querySelectorAll('.portfolio-filter .filter-button');
235
+ const portfolioItems = document.querySelectorAll('.portfolio-grid .portfolio-item');
236
+
237
+ filterButtons.forEach(button => {
238
+ button.addEventListener('click', function() {
239
+ // Update active button state
240
+ filterButtons.forEach(btn => btn.classList.remove('active'));
241
+ this.classList.add('active');
242
+
243
+ const filterValue = this.getAttribute('data-filter');
244
+
245
+ // Show/hide portfolio items
246
+ portfolioItems.forEach(item => {
247
+ const categories = item.getAttribute('data-categories');
248
+ if (filterValue === 'all' || (categories && categories.split(' ').includes(filterValue))) {
249
+ item.style.display = 'block'; // Or restore original display value
250
+ } else {
251
+ item.style.display = 'none';
252
+ }
253
+ });
254
+ });
255
+ });
256
+ });
257
+ </script>
258
+ {% endblock %}
workspace/website/process.html ADDED
@@ -0,0 +1,249 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}Process - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {% block extra_css %}
6
+ <link rel="stylesheet" href="/assets/css/pages/process.css" />
7
+ {% endblock %}
8
+
9
+ {% block content %}
10
+ <!-- Process Section -->
11
+ <h1 class="page-title">My Process</h1>
12
+ <p class="page-intro">I believe in a structured, transparent approach to implementing AI solutions. <strong>When you partner with AppSimple, you work directly with me, Charles Feinn, ensuring dedicated expertise on your project.</strong> Here's how we'll work together to bring AI capabilities to your business:</p>
13
+
14
+ <!-- Process Steps with Lucide Icons -->
15
+ <div class="process-steps">
16
+ <div class="process-step" data-step="1">
17
+ <div class="process-step-content">
18
+ <!-- New structure with icon and title in flex container -->
19
+ <div class="process-step-header">
20
+ <div class="expertise-icon-container">
21
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
22
+ <path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z"/>
23
+ <polyline points="9 22 9 12 15 12 15 22"/>
24
+ </svg>
25
+ </div>
26
+ <h3>Discovery & Assessment</h3>
27
+ </div>
28
+ <div class="process-step-content-body">
29
+ <p>We begin by understanding your business goals, challenges, and current processes. Through conversations and analysis, I identify opportunities where AI can create the most value.</p>
30
+ <p>This phase includes:</p>
31
+ <ul class="service-list">
32
+ <li>Initial consultation to discuss your needs</li>
33
+ <li>Review of existing workflows and pain points</li>
34
+ <li>Analysis of available data and systems</li>
35
+ <li>Identification of high-impact AI opportunities</li>
36
+ </ul>
37
+ </div>
38
+ </div>
39
+ </div>
40
+
41
+ <div class="process-step" data-step="2">
42
+ <div class="process-step-content">
43
+ <!-- New structure with icon and title in flex container -->
44
+ <div class="process-step-header">
45
+ <div class="expertise-icon-container">
46
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
47
+ <path d="M2 3h20v14H2z"/>
48
+ <path d="M8 21h8"/>
49
+ <path d="M12 17v4"/>
50
+ </svg>
51
+ </div>
52
+ <h3>Solution Design</h3>
53
+ </div>
54
+ <div class="process-step-content-body">
55
+ <p>Based on our findings, I design a tailored solution that addresses your specific needs. I focus on practical implementations that deliver clear ROI.</p>
56
+ <p>This phase includes:</p>
57
+ <ul class="service-list">
58
+ <li>Selection of appropriate AI technologies</li>
59
+ <li>Creation of solution architecture</li>
60
+ <li>Development of implementation roadmap</li>
61
+ <li>Project scope and timeline definition</li>
62
+ </ul>
63
+ </div>
64
+ </div>
65
+ </div>
66
+
67
+ <div class="process-step" data-step="3">
68
+ <div class="process-step-content">
69
+ <!-- New structure with icon and title in flex container -->
70
+ <div class="process-step-header">
71
+ <div class="expertise-icon-container">
72
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
73
+ <polyline points="16 18 22 12 16 6"/>
74
+ <polyline points="8 6 2 12 8 18"/>
75
+ </svg>
76
+ </div>
77
+ <h3>Implementation</h3>
78
+ </div>
79
+ <div class="process-step-content-body">
80
+ <p>This is where ideas become reality. I handle the technical heavy lifting, building and integrating the solution into your existing systems and workflows.</p>
81
+ <p>This phase includes:</p>
82
+ <ul class="service-list">
83
+ <li>Development of custom AI solutions</li>
84
+ <li>Integration with existing systems</li>
85
+ <li>Testing and quality assurance</li>
86
+ <li>Iterative refinement based on feedback</li>
87
+ </ul>
88
+ </div>
89
+ </div>
90
+ </div>
91
+
92
+ <div class="process-step" data-step="4">
93
+ <div class="process-step-content">
94
+ <!-- New structure with icon and title in flex container -->
95
+ <div class="process-step-header">
96
+ <div class="expertise-icon-container">
97
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
98
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
99
+ <circle cx="9" cy="7" r="4"/>
100
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"/>
101
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"/>
102
+ </svg>
103
+ </div>
104
+ <h3>Knowledge Transfer & Support</h3>
105
+ </div>
106
+ <div class="process-step-content-body">
107
+ <p>Once implemented, I ensure you and your team understand how to use and maintain the solution. Ongoing support ensures your AI solution continues to deliver value.</p>
108
+ <p>This phase includes:</p>
109
+ <ul class="service-list">
110
+ <li>Training sessions for your team</li>
111
+ <li>Documentation of the solution</li>
112
+ <li>Handover of all relevant materials</li>
113
+ <li>Optional ongoing support and maintenance</li>
114
+ </ul>
115
+ </div>
116
+ </div>
117
+ </div>
118
+ </div>
119
+
120
+ <h2 class="section-heading">Project Timeline</h2>
121
+ <p class="section-intro">While every project is unique, here's a typical timeline for implementing an AI solution:</p>
122
+
123
+ <!-- Timeline with Updated Styling -->
124
+ <div class="timeline">
125
+ <div class="timeline-item">
126
+ <div class="timeline-marker">
127
+ <span>1</span>
128
+ </div>
129
+ <div class="timeline-content">
130
+ <!-- Updated structure with icon and title in flex container -->
131
+ <div class="timeline-header">
132
+ <div class="expertise-icon-container">
133
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
134
+ <circle cx="12" cy="12" r="10"/>
135
+ <line x1="12" y1="8" x2="12" y2="16"/>
136
+ <line x1="8" y1="12" x2="16" y2="12"/>
137
+ </svg>
138
+ </div>
139
+ <div class="timeline-title">Discovery & Initial Assessment</div>
140
+ </div>
141
+ <p>Consultation, requirements gathering, and opportunity identification.</p>
142
+ </div>
143
+ </div>
144
+
145
+ <div class="timeline-item">
146
+ <div class="timeline-marker">
147
+ <span>2</span>
148
+ </div>
149
+ <div class="timeline-content">
150
+ <!-- Updated structure with icon and title in flex container -->
151
+ <div class="timeline-header">
152
+ <div class="expertise-icon-container">
153
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
154
+ <polygon points="14 2 18 6 7 17 3 17 3 13 14 2"/>
155
+ <line x1="3" y1="22" x2="21" y2="22"/>
156
+ </svg>
157
+ </div>
158
+ <div class="timeline-title">Solution Design</div>
159
+ </div>
160
+ <p>Technology selection, architecture development, and project planning.</p>
161
+ </div>
162
+ </div>
163
+
164
+ <div class="timeline-item">
165
+ <div class="timeline-marker">
166
+ <span>3</span>
167
+ </div>
168
+ <div class="timeline-content">
169
+ <!-- Updated structure with icon and title in flex container -->
170
+ <div class="timeline-header">
171
+ <div class="expertise-icon-container">
172
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
173
+ <polyline points="16 18 22 12 16 6"/>
174
+ <polyline points="8 6 2 12 8 18"/>
175
+ </svg>
176
+ </div>
177
+ <div class="timeline-title">Development & Implementation</div>
178
+ </div>
179
+ <p>Building the solution, integration, and initial testing.</p>
180
+ </div>
181
+ </div>
182
+
183
+ <div class="timeline-item">
184
+ <div class="timeline-marker">
185
+ <span>4</span>
186
+ </div>
187
+ <div class="timeline-content">
188
+ <!-- Updated structure with icon and title in flex container -->
189
+ <div class="timeline-header">
190
+ <div class="expertise-icon-container">
191
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
192
+ <path d="M12 22c5.523 0 10-4.477 10-10S17.523 2 12 2 2 6.477 2 12s4.477 10 10 10z"/>
193
+ <path d="m9 12 2 2 4-4"/>
194
+ </svg>
195
+ </div>
196
+ <div class="timeline-title">Testing & Refinement</div>
197
+ </div>
198
+ <p>QA testing, feedback collection, and solution optimization.</p>
199
+ </div>
200
+ </div>
201
+
202
+ <div class="timeline-item">
203
+ <div class="timeline-marker">
204
+ <span>5</span>
205
+ </div>
206
+ <div class="timeline-content">
207
+ <!-- Updated structure with icon and title in flex container -->
208
+ <div class="timeline-header">
209
+ <div class="expertise-icon-container">
210
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
211
+ <path d="M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z"/>
212
+ <line x1="4" y1="22" x2="4" y2="15"/>
213
+ </svg>
214
+ </div>
215
+ <div class="timeline-title">Deployment & Training</div>
216
+ </div>
217
+ <p>Final deployment, team training, and knowledge transfer.</p>
218
+ </div>
219
+ </div>
220
+
221
+ <div class="timeline-item">
222
+ <div class="timeline-marker">
223
+ <span>6</span>
224
+ </div>
225
+ <div class="timeline-content">
226
+ <!-- Updated structure with icon and title in flex container -->
227
+ <div class="timeline-header">
228
+ <div class="expertise-icon-container">
229
+ <svg class="icon expertise-icon" viewBox="0 0 24 24">
230
+ <circle cx="12" cy="12" r="10"/>
231
+ <polyline points="12 6 12 12 16 14"/>
232
+ </svg>
233
+ </div>
234
+ <div class="timeline-title">Support & Iteration</div>
235
+ </div>
236
+ <p>Continuous improvement, updates, and maintenance as needed.</p>
237
+ </div>
238
+ </div>
239
+ </div>
240
+
241
+ <p>This timeline can be adjusted based on project complexity, your specific needs, and resource availability.</p>
242
+
243
+ <!-- CTA Section -->
244
+ <div class="process-cta">
245
+ <h3>Ready to start your Applied AI journey?</h3>
246
+ <p>Let's discuss your business goals and explore how AI can help you achieve them. The first step is a conversation to understand your needs.</p>
247
+ <a href="/contact" class="process-cta-button">Schedule a Consultation</a>
248
+ </div>
249
+ {% endblock %}
workspace/website/services.html ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {% extends "base.html" %}
2
+
3
+ {% block title %}Services - Charles Feinn // AppSimple{% endblock %}
4
+
5
+ {% block extra_css %}
6
+ <link rel="stylesheet" href="/assets/css/pages/services.css" />
7
+ {% endblock %}
8
+
9
+ {% block content %}
10
+ <!-- Services Introduction -->
11
+ <h1 class="page-title">Services</h1>
12
+ <p class="page-intro">I provide specialized technical services across mobile development and applied AI. My background in creating intuitive mobile experiences informs how I develop AI solutions that integrate seamlessly with how people work. Whether you need a mobile app, an AI-powered solution, or a solution that combines both, I focus on practical, user-centric technology that delivers real business value. <strong>When you partner with AppSimple, you work directly with me, Charles Feinn, ensuring dedicated expertise on your project.</strong></p>
13
+
14
+ <!-- Mobile Development Services -->
15
+ <h2 class="section-heading">Mobile Development</h2>
16
+
17
+ <div class="service-item">
18
+ <h3>
19
+ <div class="icon-container">
20
+ <svg class="icon service-icon" viewBox="0 0 24 24">
21
+ <rect x="5" y="2" width="14" height="20" rx="2" ry="2"/>
22
+ <line x1="12" y1="18" x2="12.01" y2="18"/>
23
+ </svg>
24
+ </div>
25
+ Custom Mobile Applications
26
+ </h3>
27
+ <ul class="service-list">
28
+ <li>iOS and Android native app development</li>
29
+ <li>Cross-platform solutions using React Native</li>
30
+ <li>User-centered design and intuitive interfaces</li>
31
+ <li>Integration with existing business systems</li>
32
+ </ul>
33
+ <a href="/portfolio" class="service-link">See portfolio examples</a>
34
+ </div>
35
+
36
+ <div class="service-item">
37
+ <h3>
38
+ <div class="icon-container">
39
+ <svg class="icon service-icon" viewBox="0 0 24 24">
40
+ <path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"/>
41
+ <circle cx="9" cy="7" r="4"/>
42
+ <path d="M23 21v-2a4 4 0 0 0-3-3.87"/>
43
+ <path d="M16 3.13a4 4 0 0 1 0 7.75"/>
44
+ </svg>
45
+ </div>
46
+ User Experience Design
47
+ </h3>
48
+ <ul class="service-list">
49
+ <li>Mobile-specific UX design for optimal usability</li>
50
+ <li>Streamlined user flows and interactions</li>
51
+ <li>Accessibility considerations</li>
52
+ <li>Usability testing and optimization</li>
53
+ </ul>
54
+ <a href="/contact" class="service-link">Discuss your needs</a>
55
+ </div>
56
+
57
+ <div class="service-item">
58
+ <h3>
59
+ <div class="icon-container">
60
+ <svg class="icon service-icon" viewBox="0 0 24 24">
61
+ <polyline points="22 12 18 12 15 21 9 3 6 12 2 12"/>
62
+ </svg>
63
+ </div>
64
+ Content & Commerce Platforms
65
+ </h3>
66
+ <ul class="service-list">
67
+ <li>Content delivery applications</li>
68
+ <li>Subscription management systems</li>
69
+ <li>In-app purchase integration</li>
70
+ <li>Commercial content marketplaces</li>
71
+ </ul>
72
+ <a href="/portfolio" class="service-link">See examples</a>
73
+ </div>
74
+
75
+ <!-- Applied AI Services -->
76
+ <h2 class="section-heading">Applied AI Solutions</h2>
77
+
78
+ <div class="service-item">
79
+ <h3>
80
+ <div class="icon-container">
81
+ <svg class="icon service-icon" viewBox="0 0 24 24">
82
+ <path d="M15.5 2H8.6c-.4 0-.8.2-1.1.5-.3.3-.5.7-.5 1.1v16.8c0 .4.2.8.5 1.1.3.3.7.5 1.1.5h12.8c.4 0 .8-.2 1.1-.5.3-.3.5-.7.5-1.1V7.5L15.5 2z"/>
83
+ <polyline points="15 2 15 8 21 8"/>
84
+ <line x1="10" y1="13" x2="18" y2="13"/>
85
+ <line x1="10" y1="17" x2="18" y2="17"/>
86
+ </svg>
87
+ </div>
88
+ Intelligent Document Processing
89
+ </h3>
90
+ <ul class="service-list">
91
+ <li>Extract structured data from unstructured documents</li>
92
+ <li>Automate document classification and routing</li>
93
+ <li>Implement OCR with AI verification</li>
94
+ <li>Create searchable document repositories</li>
95
+ </ul>
96
+ <a href="/contact" class="service-link">Discuss your needs</a>
97
+ </div>
98
+
99
+ <div class="service-item">
100
+ <h3>
101
+ <div class="icon-container">
102
+ <svg class="icon service-icon" viewBox="0 0 24 24">
103
+ <path d="M5 22h14"/>
104
+ <path d="M5 2h14"/>
105
+ <path d="M17 22v-4.172a2 2 0 0 0-.586-1.414L12 12l-4.414 4.414A2 2 0 0 0 7 17.828V22"/>
106
+ <path d="M7 2v4.172a2 2 0 0 0 .586 1.414L12 12l4.414-4.414A2 2 0 0 0 17 6.172V2"/>
107
+ </svg>
108
+ </div>
109
+ Business Process Automation
110
+ </h3>
111
+ <ul class="service-list">
112
+ <li>Identify automation opportunities in your workflow</li>
113
+ <li>Implement AI-powered workflow solutions</li>
114
+ <li>Connect disparate systems with intelligent processes</li>
115
+ <li>Develop custom business rules and logic</li>
116
+ </ul>
117
+ <a href="/contact" class="service-link">Discuss your needs</a>
118
+ </div>
119
+
120
+ <div class="service-item">
121
+ <h3>
122
+ <div class="icon-container">
123
+ <svg class="icon service-icon" viewBox="0 0 24 24">
124
+ <polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"></polygon>
125
+ </svg>
126
+ </div>
127
+ LLM & Chatbot Implementation
128
+ </h3>
129
+ <ul class="service-list">
130
+ <li>Design and implement custom AI assistants</li>
131
+ <li>Fine-tune models for specific business knowledge</li>
132
+ <li>Create secure, accurate chatbot systems</li>
133
+ <li>Implement retrieval-augmented generation (RAG)</li>
134
+ </ul>
135
+ <a href="/contact" class="service-link">Discuss your needs</a>
136
+ </div>
137
+
138
+ <!-- Hybrid Solutions -->
139
+ <h2 class="section-heading">Hybrid Mobile & AI Solutions</h2>
140
+
141
+ <div class="service-item">
142
+ <h3>
143
+ <div class="icon-container">
144
+ <svg class="icon service-icon" viewBox="0 0 24 24">
145
+ <rect x="3" y="3" width="18" height="18" rx="2" ry="2"/>
146
+ <line x1="12" y1="8" x2="12" y2="16"/>
147
+ <line x1="8" y1="12" x2="16" y2="12"/>
148
+ </svg>
149
+ </div>
150
+ AI-Enhanced Mobile Applications
151
+ </h3>
152
+ <ul class="service-list">
153
+ <li>Mobile apps with integrated AI capabilities</li>
154
+ <li>Personalized user experiences based on usage patterns</li>
155
+ <li>Intelligent content recommendation systems</li>
156
+ <li>On-device machine learning features</li>
157
+ </ul>
158
+ <a href="/contact" class="service-link">Discuss your needs</a>
159
+ </div>
160
+
161
+ <div class="service-item">
162
+ <h3>
163
+ <div class="icon-container">
164
+ <svg class="icon service-icon" viewBox="0 0 24 24">
165
+ <line x1="12" y1="2" x2="12" y2="6"/>
166
+ <line x1="12" y1="18" x2="12" y2="22"/>
167
+ <line x1="4.93" y1="4.93" x2="7.76" y2="7.76"/>
168
+ <line x1="16.24" y1="16.24" x2="19.07" y2="19.07"/>
169
+ <line x1="2" y1="12" x2="6" y2="12"/>
170
+ <line x1="18" y1="12" x2="22" y2="12"/>
171
+ <line x1="4.93" y1="19.07" x2="7.76" y2="16.24"/>
172
+ <line x1="16.24" y1="7.76" x2="19.07" y2="4.93"/>
173
+ </svg>
174
+ </div>
175
+ Smart Business Tools
176
+ </h3>
177
+ <ul class="service-list">
178
+ <li>Mobile interfaces for AI business systems</li>
179
+ <li>Real-time data analysis and visualization</li>
180
+ <li>Intelligent decision support systems</li>
181
+ <li>Field data collection with AI processing</li>
182
+ </ul>
183
+ <a href="/contact" class="service-link">Discuss your needs</a>
184
+ </div>
185
+
186
+ <!-- CTA Section -->
187
+ <div class="process-cta">
188
+ <h3>Not sure which service you need?</h3>
189
+ <p>The best solutions often begin with a conversation. Let's discuss your business challenges and determine which approach—mobile, AI, or a hybrid solution—will deliver the most value for your specific situation.</p>
190
+ <a href="/contact" class="process-cta-button">Start a Conversation</a>
191
+ </div>
192
+ {% endblock %}