<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Justine Lopez</title>
    <description>The latest articles on DEV Community by Justine Lopez (@justpres).</description>
    <link>https://dev.to/justpres</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4069548%2F1b2d649f-8713-49f1-a06b-deda029b7d55.jpg</url>
      <title>DEV Community: Justine Lopez</title>
      <link>https://dev.to/justpres</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/justpres"/>
    <language>en</language>
    <item>
      <title>I Built an Android App That Tracks Screens Using Computer Vision</title>
      <dc:creator>Justine Lopez</dc:creator>
      <pubDate>Thu, 13 Aug 2026 21:58:00 +0000</pubDate>
      <link>https://dev.to/justpres/i-built-an-android-app-that-tracks-screens-using-computer-vision-42of</link>
      <guid>https://dev.to/justpres/i-built-an-android-app-that-tracks-screens-using-computer-vision-42of</guid>
      <description>&lt;p&gt;I Built an Android App That Tracks Screens Using Computer Vision&lt;/p&gt;

&lt;p&gt;Most of my earlier projects were fairly conventional applications.&lt;/p&gt;

&lt;p&gt;They had screens.&lt;/p&gt;

&lt;p&gt;They had data.&lt;/p&gt;

&lt;p&gt;They had buttons.&lt;/p&gt;

&lt;p&gt;They had users interacting with information.&lt;/p&gt;

&lt;p&gt;Then I wanted to build something different.&lt;/p&gt;

&lt;p&gt;I wanted the application to look at the physical world through a camera and actually understand something about what it was seeing.&lt;/p&gt;

&lt;p&gt;That became ScreenFrame, also called Warp_Flow.&lt;/p&gt;

&lt;p&gt;The Idea&lt;/p&gt;

&lt;p&gt;ScreenFrame is an Android application focused on real-time screen detection and alignment.&lt;/p&gt;

&lt;p&gt;The basic idea is:&lt;/p&gt;

&lt;p&gt;Camera&lt;br&gt;
  ↓&lt;br&gt;
Analyze Frames&lt;br&gt;
  ↓&lt;br&gt;
Find Edges&lt;br&gt;
  ↓&lt;br&gt;
Find Corners&lt;br&gt;
  ↓&lt;br&gt;
Track Screen&lt;br&gt;
  ↓&lt;br&gt;
Calculate Perspective&lt;/p&gt;

&lt;p&gt;The application attempts to identify the boundaries of a display in the camera view.&lt;/p&gt;

&lt;p&gt;This sounds straightforward until you realize that the camera doesn't always see a perfect rectangle.&lt;/p&gt;

&lt;p&gt;The Screen Isn't Always a Rectangle&lt;/p&gt;

&lt;p&gt;Point a phone directly at a monitor and the geometry looks relatively simple.&lt;/p&gt;

&lt;p&gt;Move the phone to the side and perspective changes everything.&lt;/p&gt;

&lt;p&gt;The physical screen is still rectangular.&lt;/p&gt;

&lt;p&gt;But the camera sees something closer to:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  __________
 /         /
/         /
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;/_________/&lt;/p&gt;

&lt;p&gt;The four corners have shifted.&lt;/p&gt;

&lt;p&gt;That's where homography becomes useful.&lt;/p&gt;

&lt;p&gt;It allows the application to reason about how points in one plane relate to another perspective.&lt;/p&gt;

&lt;p&gt;For ScreenFrame, that means using detected screen corners to help understand and align the display.&lt;/p&gt;

&lt;p&gt;Edge Detection&lt;/p&gt;

&lt;p&gt;The application uses edge detection to find possible boundaries.&lt;/p&gt;

&lt;p&gt;But a camera frame contains much more than the screen.&lt;/p&gt;

&lt;p&gt;There can be:&lt;/p&gt;

&lt;p&gt;Reflections&lt;br&gt;
Text&lt;br&gt;
Images&lt;br&gt;
Furniture&lt;br&gt;
Objects&lt;br&gt;
Lighting changes&lt;/p&gt;

&lt;p&gt;So simply detecting every edge isn't enough.&lt;/p&gt;

&lt;p&gt;ScreenFrame exposes Canny low and high thresholds that can be calibrated to help identify useful edges while filtering some unwanted visual information.&lt;/p&gt;

&lt;p&gt;That turned image processing into a much more practical problem.&lt;/p&gt;

&lt;p&gt;Real-World Lighting Is Messy&lt;/p&gt;

&lt;p&gt;Computer vision works very differently on a controlled image compared with a real camera.&lt;/p&gt;

&lt;p&gt;A screen might be bright.&lt;/p&gt;

&lt;p&gt;It might be dim.&lt;/p&gt;

&lt;p&gt;It might reflect the room.&lt;/p&gt;

&lt;p&gt;The surrounding environment might be darker.&lt;/p&gt;

&lt;p&gt;To deal with these conditions, ScreenFrame includes an adaptive compensation filter designed to help with ambient and low-light conditions.&lt;/p&gt;

&lt;p&gt;That made one thing very clear to me:&lt;/p&gt;

&lt;p&gt;Computer vision isn't just about getting the algorithm to work once.&lt;/p&gt;

&lt;p&gt;It's about getting it to continue working when the environment changes.&lt;/p&gt;

&lt;p&gt;Real-Time Means Real Performance&lt;/p&gt;

&lt;p&gt;This was probably the biggest difference from my other Android applications.&lt;/p&gt;

&lt;p&gt;A normal app might do something after a user action.&lt;/p&gt;

&lt;p&gt;A camera application can be processing continuously.&lt;/p&gt;

&lt;p&gt;Frame → Analyze&lt;br&gt;
Frame → Analyze&lt;br&gt;
Frame → Analyze&lt;br&gt;
Frame → Analyze&lt;br&gt;
Frame → Analyze&lt;br&gt;
...&lt;/p&gt;

&lt;p&gt;At 60 FPS, that's a lot of incoming data.&lt;/p&gt;

&lt;p&gt;A small performance problem can happen dozens of times every second.&lt;/p&gt;

&lt;p&gt;So I had to think about performance much earlier.&lt;/p&gt;

&lt;p&gt;Compose and Real-Time State&lt;/p&gt;

&lt;p&gt;The interface uses Jetpack Compose and Material 3.&lt;/p&gt;

&lt;p&gt;The application uses reactive state with Kotlin StateFlow inside a ViewModel.&lt;/p&gt;

&lt;p&gt;The simplified architecture looks like:&lt;/p&gt;

&lt;p&gt;Vision Pipeline&lt;br&gt;
      ↓&lt;br&gt;
   ViewModel&lt;br&gt;
      ↓&lt;br&gt;
   StateFlow&lt;br&gt;
      ↓&lt;br&gt;
 Compose HUD&lt;/p&gt;

&lt;p&gt;I also use techniques such as remember, state hoisting, and controlled recomposition to avoid unnecessary UI work.&lt;/p&gt;

&lt;p&gt;This was interesting because the computer vision pipeline and the UI aren't separate performance problems.&lt;/p&gt;

&lt;p&gt;They affect each other.&lt;/p&gt;

&lt;p&gt;Battery Is Part of Performance&lt;/p&gt;

&lt;p&gt;There's another constraint on mobile devices:&lt;/p&gt;

&lt;p&gt;battery.&lt;/p&gt;

&lt;p&gt;Running camera analysis continuously isn't free.&lt;/p&gt;

&lt;p&gt;ScreenFrame therefore includes an automatic battery-saving mode.&lt;/p&gt;

&lt;p&gt;When the battery becomes low, such as below 20%, the application can reduce the analysis refresh frequency.&lt;/p&gt;

&lt;p&gt;So instead of thinking:&lt;/p&gt;

&lt;p&gt;Maximum performance all the time.&lt;/p&gt;

&lt;p&gt;the application can think:&lt;/p&gt;

&lt;p&gt;How much performance does the device actually need right now?&lt;/p&gt;

&lt;p&gt;That's a much more practical approach for mobile software.&lt;/p&gt;

&lt;p&gt;30 FPS vs 60 FPS&lt;/p&gt;

&lt;p&gt;ScreenFrame supports both 30 FPS and 60 FPS workflows.&lt;/p&gt;

&lt;p&gt;That difference matters.&lt;/p&gt;

&lt;p&gt;At 30 FPS:&lt;/p&gt;

&lt;p&gt;30 frames per second&lt;/p&gt;

&lt;p&gt;At 60 FPS:&lt;/p&gt;

&lt;p&gt;60 frames per second&lt;/p&gt;

&lt;p&gt;The application potentially has twice as many frames to process.&lt;/p&gt;

&lt;p&gt;That means performance problems become much easier to expose.&lt;/p&gt;

&lt;p&gt;Building the HUD&lt;/p&gt;

&lt;p&gt;I also wanted the UI to match the technical nature of the project.&lt;/p&gt;

&lt;p&gt;Instead of creating a traditional Android interface, I designed a dark HUD-style control deck using Jetpack Compose and Material 3.&lt;/p&gt;

&lt;p&gt;The application uses centralized design tokens for:&lt;/p&gt;

&lt;p&gt;Spacing&lt;br&gt;
Shapes&lt;br&gt;
Typography&lt;br&gt;
Visual accents&lt;/p&gt;

&lt;p&gt;There are also multiple neon-inspired themes, including:&lt;/p&gt;

&lt;p&gt;Neon Green&lt;br&gt;
Cyber Orange&lt;br&gt;
Hot Pink&lt;br&gt;
Electric Purple&lt;br&gt;
Electric Blue&lt;br&gt;
Amber Gold&lt;/p&gt;

&lt;p&gt;The UI is intentionally designed to feel more like a technical instrument than a typical Android application.&lt;/p&gt;

&lt;p&gt;What I Learned&lt;/p&gt;

&lt;p&gt;ScreenFrame changed how I think about Android development.&lt;/p&gt;

&lt;p&gt;Before this project, I mostly thought about:&lt;/p&gt;

&lt;p&gt;How do I make this screen work?&lt;/p&gt;

&lt;p&gt;Now I also think about:&lt;/p&gt;

&lt;p&gt;How many frames am I processing?&lt;/p&gt;

&lt;p&gt;How often does this state change?&lt;/p&gt;

&lt;p&gt;What causes recomposition?&lt;/p&gt;

&lt;p&gt;What happens when the battery gets low?&lt;/p&gt;

&lt;p&gt;What happens when lighting changes?&lt;/p&gt;

&lt;p&gt;How expensive is this operation when repeated 60 times per second?&lt;/p&gt;

&lt;p&gt;Those are very different questions.&lt;/p&gt;

&lt;p&gt;And they pushed me toward thinking more about systems rather than individual screens.&lt;/p&gt;

&lt;p&gt;Why I Like Building Projects&lt;/p&gt;

&lt;p&gt;This is probably the biggest lesson I got from ScreenFrame.&lt;/p&gt;

&lt;p&gt;When you build something from scratch, the problems aren't neatly organized into lessons.&lt;/p&gt;

&lt;p&gt;You discover them.&lt;/p&gt;

&lt;p&gt;You start with:&lt;/p&gt;

&lt;p&gt;"I want to detect a screen."&lt;/p&gt;

&lt;p&gt;Then you discover:&lt;/p&gt;

&lt;p&gt;"I need edge detection."&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;"Perspective is a problem."&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;"I need homography."&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;"The camera is processing too much."&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;"Now I have a performance problem."&lt;/p&gt;

&lt;p&gt;And eventually the project becomes much more technically interesting than the original idea.&lt;/p&gt;

&lt;p&gt;That's one of the reasons I enjoy building.&lt;/p&gt;

&lt;p&gt;The project forces you to learn things you didn't initially know you needed.&lt;/p&gt;

&lt;p&gt;What's Next?&lt;/p&gt;

&lt;p&gt;ScreenFrame pushed me into computer vision, real-time processing, geometry, and Android performance.&lt;/p&gt;

&lt;p&gt;For the next project, I wanted to take everything I've been learning about application architecture and apply it to another real-world problem.&lt;/p&gt;

&lt;p&gt;That's where the next project in my portfolio begins.&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>computervision</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built HackForPinas to Make Philippine Hackathons Easier to Discover</title>
      <dc:creator>Justine Lopez</dc:creator>
      <pubDate>Thu, 13 Aug 2026 06:34:00 +0000</pubDate>
      <link>https://dev.to/justpres/i-built-hackforpinas-to-make-philippine-hackathons-easier-to-discover-1n6g</link>
      <guid>https://dev.to/justpres/i-built-hackforpinas-to-make-philippine-hackathons-easier-to-discover-1n6g</guid>
      <description>&lt;p&gt;In my previous article, I talked about Train Track, the transit app I built around Metro Manila's railway systems.&lt;/p&gt;

&lt;p&gt;This project started with a completely different problem.&lt;/p&gt;

&lt;p&gt;I kept thinking about how difficult it can be to discover hackathons and coding competitions.&lt;/p&gt;

&lt;p&gt;Not because they don't exist.&lt;/p&gt;

&lt;p&gt;They do.&lt;/p&gt;

&lt;p&gt;The problem is that they're scattered everywhere.&lt;/p&gt;

&lt;p&gt;A university might announce one.&lt;/p&gt;

&lt;p&gt;A government agency might host another.&lt;/p&gt;

&lt;p&gt;A private company might run one.&lt;/p&gt;

&lt;p&gt;A developer community might post another.&lt;/p&gt;

&lt;p&gt;And suddenly you're checking multiple websites just to figure out:&lt;/p&gt;

&lt;p&gt;What can I actually join?&lt;/p&gt;

&lt;p&gt;So I built HackForPinas.&lt;/p&gt;

&lt;p&gt;What is HackForPinas?&lt;/p&gt;

&lt;p&gt;HackForPinas is a free, public, and open-source directory for Philippine:&lt;/p&gt;

&lt;p&gt;Hackathons&lt;br&gt;
Coding challenges&lt;br&gt;
Technology competitions&lt;/p&gt;

&lt;p&gt;The idea is pretty straightforward:&lt;/p&gt;

&lt;p&gt;Make opportunities easier to discover.&lt;/p&gt;

&lt;p&gt;Events can be filtered by:&lt;/p&gt;

&lt;p&gt;Region&lt;br&gt;
Format&lt;br&gt;
Organizer type&lt;br&gt;
Status&lt;/p&gt;

&lt;p&gt;Organizers are categorized as:&lt;/p&gt;

&lt;p&gt;Government&lt;br&gt;
University&lt;br&gt;
Private&lt;/p&gt;

&lt;p&gt;Instead of browsing through unrelated websites, users can explore opportunities in one place.&lt;/p&gt;

&lt;p&gt;But the more I worked on it, the more I realized that the directory itself wasn't the hardest part.&lt;/p&gt;

&lt;p&gt;The data was.&lt;/p&gt;

&lt;p&gt;The Data Problem&lt;/p&gt;

&lt;p&gt;Imagine trying to collect hackathons from different websites.&lt;/p&gt;

&lt;p&gt;One might have an RSS feed.&lt;/p&gt;

&lt;p&gt;Another might use WordPress.&lt;/p&gt;

&lt;p&gt;Another might expose an API.&lt;/p&gt;

&lt;p&gt;Another might have an ordinary HTML page.&lt;/p&gt;

&lt;p&gt;And another might not have anything structured at all.&lt;/p&gt;

&lt;p&gt;So HackForPinas uses multiple scraping strategies:&lt;/p&gt;

&lt;p&gt;WordPress REST API&lt;br&gt;
RSS&lt;br&gt;
GDG Community&lt;br&gt;
Eventbrite&lt;br&gt;
HTML + Cheerio&lt;/p&gt;

&lt;p&gt;The scraper runs through a background endpoint and collects events from different Philippine technology sources.&lt;/p&gt;

&lt;p&gt;The interesting part wasn't:&lt;/p&gt;

&lt;p&gt;"Can I scrape a website?"&lt;/p&gt;

&lt;p&gt;It was:&lt;/p&gt;

&lt;p&gt;Can I turn information from completely different sources into one consistent dataset?&lt;/p&gt;

&lt;p&gt;That became a much more interesting engineering problem.&lt;/p&gt;

&lt;p&gt;I Didn't Want Anyone to Publish Directly&lt;/p&gt;

&lt;p&gt;There's another problem with a public directory.&lt;/p&gt;

&lt;p&gt;If anyone can submit an event, what stops someone from submitting spam?&lt;/p&gt;

&lt;p&gt;Or a malicious link?&lt;/p&gt;

&lt;p&gt;Or incorrect information?&lt;/p&gt;

&lt;p&gt;That's why I designed the submission flow around moderation.&lt;/p&gt;

&lt;p&gt;Submission&lt;br&gt;
    ↓&lt;br&gt;
Zod validation&lt;br&gt;
    ↓&lt;br&gt;
Security checks&lt;br&gt;
    ↓&lt;br&gt;
Rate limiting&lt;br&gt;
    ↓&lt;br&gt;
pending_review&lt;br&gt;
    ↓&lt;br&gt;
Admin review&lt;br&gt;
    ↓&lt;br&gt;
Approve / Reject&lt;br&gt;
    ↓&lt;br&gt;
Published&lt;/p&gt;

&lt;p&gt;A community submission doesn't automatically become a public event.&lt;/p&gt;

&lt;p&gt;It goes through review first.&lt;/p&gt;

&lt;p&gt;Security Is Part of the Architecture&lt;/p&gt;

&lt;p&gt;This project also forced me to think more seriously about security.&lt;/p&gt;

&lt;p&gt;There are several types of user-controlled input.&lt;/p&gt;

&lt;p&gt;The application therefore uses:&lt;/p&gt;

&lt;p&gt;Zod schema validation&lt;br&gt;
Open-redirect protection&lt;br&gt;
HTML sanitization&lt;br&gt;
API rate limiting&lt;br&gt;
Supabase Row Level Security&lt;br&gt;
Controlled admin workflows&lt;/p&gt;

&lt;p&gt;One of the interesting things I've learned about security is that the most important features aren't always visible.&lt;/p&gt;

&lt;p&gt;A user might immediately notice an animation.&lt;/p&gt;

&lt;p&gt;They probably won't notice that a malicious redirect was blocked.&lt;/p&gt;

&lt;p&gt;But the second one can matter much more.&lt;/p&gt;

&lt;p&gt;Building an Admin Workflow&lt;/p&gt;

&lt;p&gt;The admin panel became an important part of the application.&lt;/p&gt;

&lt;p&gt;Administrators can:&lt;/p&gt;

&lt;p&gt;Review submitted events&lt;br&gt;
Verify organizers&lt;br&gt;
Edit event information&lt;br&gt;
Approve submissions&lt;br&gt;
Reject submissions&lt;/p&gt;

&lt;p&gt;I also added an audit trail.&lt;/p&gt;

&lt;p&gt;The submissions_audit_log table records moderation activity such as:&lt;/p&gt;

&lt;p&gt;Who performed the action&lt;br&gt;
What action was performed&lt;br&gt;
When it happened&lt;/p&gt;

&lt;p&gt;That gives the platform a history of how submissions were handled.&lt;/p&gt;

&lt;p&gt;Making the Interface Less Boring&lt;/p&gt;

&lt;p&gt;I also wanted HackForPinas to feel different from a typical directory.&lt;/p&gt;

&lt;p&gt;So I experimented with several visual effects.&lt;/p&gt;

&lt;p&gt;There's a generative SVG mesh background.&lt;/p&gt;

&lt;p&gt;There's a retro split-flap animation.&lt;/p&gt;

&lt;p&gt;There's a letter glitch effect.&lt;/p&gt;

&lt;p&gt;There are animated counters.&lt;/p&gt;

&lt;p&gt;These don't make the scraper work better.&lt;/p&gt;

&lt;p&gt;But they make the product feel like an actual product rather than a database with a frontend attached to it.&lt;/p&gt;

&lt;p&gt;And honestly, that distinction matters to me.&lt;/p&gt;

&lt;p&gt;The Stack&lt;/p&gt;

&lt;p&gt;The project is built using:&lt;/p&gt;

&lt;p&gt;Next.js 16&lt;br&gt;
React 19&lt;br&gt;
Tailwind CSS v4&lt;br&gt;
Supabase / PostgreSQL&lt;br&gt;
Motion&lt;br&gt;
Cheerio&lt;br&gt;
Zod&lt;br&gt;
Lucide React&lt;br&gt;
Iconify&lt;br&gt;
date-fns&lt;/p&gt;

&lt;p&gt;The interesting part is that the application combines automated data collection with user-generated submissions.&lt;/p&gt;

&lt;p&gt;That means the system has to deal with two very different sources of data:&lt;/p&gt;

&lt;p&gt;Machine-generated data&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;Human-generated data.&lt;/p&gt;

&lt;p&gt;Both can fail in different ways.&lt;/p&gt;

&lt;p&gt;What This Project Taught Me&lt;/p&gt;

&lt;p&gt;Train Track taught me to think about the user's journey.&lt;/p&gt;

&lt;p&gt;HackForPinas taught me to think about the system behind the interface.&lt;/p&gt;

&lt;p&gt;I started asking questions like:&lt;/p&gt;

&lt;p&gt;Where does this data come from?&lt;br&gt;
Can I trust it?&lt;br&gt;
What happens if the source changes?&lt;br&gt;
What happens if someone submits something malicious?&lt;br&gt;
Who gets permission to publish?&lt;br&gt;
How do I track administrative actions?&lt;br&gt;
What happens when automation fails?&lt;/p&gt;

&lt;p&gt;Those questions weren't necessarily part of my original idea.&lt;/p&gt;

&lt;p&gt;But they became some of the most valuable parts of building the project.&lt;/p&gt;

&lt;p&gt;Why I Wanted to Build This for the Philippines&lt;/p&gt;

&lt;p&gt;There's also a personal reason behind the project.&lt;/p&gt;

&lt;p&gt;I wanted to build something specifically around the Filipino technology community.&lt;/p&gt;

&lt;p&gt;Not another generic tutorial project.&lt;/p&gt;

&lt;p&gt;Not another clone.&lt;/p&gt;

&lt;p&gt;Something that could potentially help Filipino developers, students, designers, and technology enthusiasts find opportunities to participate and build things.&lt;/p&gt;

&lt;p&gt;That's what makes HackForPinas more meaningful to me than simply saying:&lt;/p&gt;

&lt;p&gt;"I built a Next.js website."&lt;/p&gt;

&lt;p&gt;The framework is just the implementation.&lt;/p&gt;

&lt;p&gt;The problem is the interesting part.&lt;/p&gt;

&lt;p&gt;What's Next?&lt;/p&gt;

&lt;p&gt;HackForPinas made me interested in building software around local problems.&lt;/p&gt;

&lt;p&gt;For the next project, I went in a completely different direction.&lt;/p&gt;

&lt;p&gt;Instead of hackathons and developer opportunities, I started thinking about something much more familiar:&lt;/p&gt;

&lt;p&gt;Filipino food.&lt;/p&gt;

&lt;p&gt;That's where Lutong Simmer comes in.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>opensource</category>
      <category>supabase</category>
    </item>
    <item>
      <title>I Built a Filipino Cooking App That Recommends Food Based on the Weather</title>
      <dc:creator>Justine Lopez</dc:creator>
      <pubDate>Wed, 12 Aug 2026 19:50:00 +0000</pubDate>
      <link>https://dev.to/justpres/i-built-a-filipino-cooking-app-that-recommends-food-based-on-the-weather-2e3f</link>
      <guid>https://dev.to/justpres/i-built-a-filipino-cooking-app-that-recommends-food-based-on-the-weather-2e3f</guid>
      <description>&lt;p&gt;One question gets asked in Filipino households all the time:&lt;/p&gt;

&lt;p&gt;"Ano ang lulutuin natin?"&lt;/p&gt;

&lt;p&gt;Sometimes you already know.&lt;/p&gt;

&lt;p&gt;Sometimes you don't.&lt;/p&gt;

&lt;p&gt;And sometimes the weather gives you a pretty good idea.&lt;/p&gt;

&lt;p&gt;Rainy afternoon?&lt;/p&gt;

&lt;p&gt;Maybe Sinigang.&lt;/p&gt;

&lt;p&gt;Cold weather?&lt;/p&gt;

&lt;p&gt;Maybe Bulalo.&lt;/p&gt;

&lt;p&gt;Hot afternoon?&lt;/p&gt;

&lt;p&gt;Maybe Halo-Halo.&lt;/p&gt;

&lt;p&gt;That simple observation became the idea behind one of my projects:&lt;/p&gt;

&lt;p&gt;Lutong Simmer.&lt;/p&gt;

&lt;p&gt;What Is Lutong Simmer?&lt;/p&gt;

&lt;p&gt;Lutong Simmer is a Filipino cooking companion application that uses weather and time of day to recommend Pinoy food.&lt;/p&gt;

&lt;p&gt;Instead of simply searching for recipes, the application uses context.&lt;/p&gt;

&lt;p&gt;It considers things like:&lt;/p&gt;

&lt;p&gt;Current weather&lt;br&gt;
Local time&lt;br&gt;
Dietary needs&lt;br&gt;
Ingredients&lt;br&gt;
Filipino recipes&lt;/p&gt;

&lt;p&gt;The basic idea is:&lt;/p&gt;

&lt;p&gt;Weather + Time + User Context&lt;br&gt;
              ↓&lt;br&gt;
      Recommendation&lt;br&gt;
              ↓&lt;br&gt;
        Filipino Food&lt;/p&gt;

&lt;p&gt;It's a simple concept, but building it introduced me to several interesting Android development problems.&lt;/p&gt;

&lt;p&gt;Why Use Weather?&lt;/p&gt;

&lt;p&gt;Weather isn't usually the first thing you associate with a recipe application.&lt;/p&gt;

&lt;p&gt;But it makes sense when you think about how people actually choose food.&lt;/p&gt;

&lt;p&gt;A rainy day can make a warm soup more appealing.&lt;/p&gt;

&lt;p&gt;A hot day can make something refreshing more attractive.&lt;/p&gt;

&lt;p&gt;So I decided to make weather part of the application's experience instead of treating it as unrelated information.&lt;/p&gt;

&lt;p&gt;The app integrates weather data and uses it as part of the context for its recommendations.&lt;/p&gt;

&lt;p&gt;Building It With Kotlin&lt;/p&gt;

&lt;p&gt;Lutong Simmer is a native Android application built entirely with Kotlin.&lt;/p&gt;

&lt;p&gt;The stack includes:&lt;/p&gt;

&lt;p&gt;Kotlin&lt;br&gt;
Jetpack Compose&lt;br&gt;
Material 3&lt;br&gt;
Room&lt;br&gt;
Coroutines&lt;br&gt;
Flow&lt;br&gt;
Coil&lt;br&gt;
Google Gemini API SDK&lt;/p&gt;

&lt;p&gt;The architecture follows an MVVM approach with Unidirectional Data Flow.&lt;/p&gt;

&lt;p&gt;The general flow looks like:&lt;/p&gt;

&lt;p&gt;Data&lt;br&gt;
 ↓&lt;br&gt;
Repository&lt;br&gt;
 ↓&lt;br&gt;
ViewModel&lt;br&gt;
 ↓&lt;br&gt;
StateFlow&lt;br&gt;
 ↓&lt;br&gt;
Compose UI&lt;/p&gt;

&lt;p&gt;This keeps the UI focused on displaying state while the underlying logic stays separated.&lt;/p&gt;

&lt;p&gt;Offline-First&lt;/p&gt;

&lt;p&gt;One of the things I wanted from the beginning was for the app to remain useful without a constant internet connection.&lt;/p&gt;

&lt;p&gt;That's why Lutong Simmer uses Room SQLite for local persistence.&lt;/p&gt;

&lt;p&gt;Saved and locally stored recipe information can remain accessible even when the network isn't available.&lt;/p&gt;

&lt;p&gt;This matters more than it might seem.&lt;/p&gt;

&lt;p&gt;Imagine you're already cooking.&lt;/p&gt;

&lt;p&gt;You open the app.&lt;/p&gt;

&lt;p&gt;The Wi-Fi doesn't work.&lt;/p&gt;

&lt;p&gt;You shouldn't lose access to your recipes.&lt;/p&gt;

&lt;p&gt;So offline support became part of the product design.&lt;/p&gt;

&lt;p&gt;Search Optimization&lt;/p&gt;

&lt;p&gt;The application also has local SQLite search with a debounce mechanism.&lt;/p&gt;

&lt;p&gt;Without debouncing, typing something like:&lt;/p&gt;

&lt;p&gt;Sinigang&lt;/p&gt;

&lt;p&gt;could result in multiple database operations:&lt;/p&gt;

&lt;p&gt;S&lt;br&gt;
Si&lt;br&gt;
Sin&lt;br&gt;
Sini&lt;br&gt;
Sin...&lt;/p&gt;

&lt;p&gt;Instead, the application waits briefly for the user to stop typing before performing the search.&lt;/p&gt;

&lt;p&gt;It's a small optimization.&lt;/p&gt;

&lt;p&gt;But these small optimizations add up when you're trying to make an application feel responsive.&lt;/p&gt;

&lt;p&gt;Kitchen Studio&lt;/p&gt;

&lt;p&gt;Lutong Simmer also lets users create their own recipes.&lt;/p&gt;

&lt;p&gt;I called this feature Kitchen Studio.&lt;/p&gt;

&lt;p&gt;Users can create custom Filipino recipes and save them locally.&lt;/p&gt;

&lt;p&gt;They can also attach photos using:&lt;/p&gt;

&lt;p&gt;Camera&lt;br&gt;
Gallery&lt;/p&gt;

&lt;p&gt;The cooking instructions can then be interacted with through a checklist.&lt;/p&gt;

&lt;p&gt;So instead of simply reading:&lt;/p&gt;

&lt;p&gt;Step 1&lt;br&gt;
Step 2&lt;br&gt;
Step 3&lt;/p&gt;

&lt;p&gt;the user can actually track their progress while cooking.&lt;/p&gt;

&lt;p&gt;Making It Feel Filipino&lt;/p&gt;

&lt;p&gt;I didn't want to build a generic recipe app and simply replace the recipes with Filipino dishes.&lt;/p&gt;

&lt;p&gt;I wanted the application to have its own identity.&lt;/p&gt;

&lt;p&gt;The interface uses a custom culinary-inspired palette:&lt;/p&gt;

&lt;p&gt;Terracotta Orange&lt;br&gt;
Golden Honey&lt;br&gt;
Sage Green&lt;/p&gt;

&lt;p&gt;It also includes localized greetings such as:&lt;/p&gt;

&lt;p&gt;Magandang Gabi, Ka-simmer!&lt;/p&gt;

&lt;p&gt;These details are small.&lt;/p&gt;

&lt;p&gt;But together, they make the application feel more intentional.&lt;/p&gt;

&lt;p&gt;The UI&lt;/p&gt;

&lt;p&gt;The application is built using Jetpack Compose and Material 3.&lt;/p&gt;

&lt;p&gt;I also experimented with custom animations.&lt;/p&gt;

&lt;p&gt;One of them is an animated empty state.&lt;/p&gt;

&lt;p&gt;Instead of simply showing an empty screen when a search returns nothing, the UI displays:&lt;/p&gt;

&lt;p&gt;A pulsing icon&lt;br&gt;
Rotating dashed ring&lt;br&gt;
Centered messaging&lt;br&gt;
Clear-search action&lt;/p&gt;

&lt;p&gt;I also paid attention to recipe card layouts.&lt;/p&gt;

&lt;p&gt;Long recipe names can easily break grid interfaces, so the cards use:&lt;/p&gt;

&lt;p&gt;maxLines = 1&lt;br&gt;
TextOverflow.Ellipsis&lt;/p&gt;

&lt;p&gt;This keeps the layout consistent.&lt;/p&gt;

&lt;p&gt;Where Gemini Comes In&lt;/p&gt;

&lt;p&gt;Lutong Simmer also integrates Google's Gemini API.&lt;/p&gt;

&lt;p&gt;The AI component helps with contextual recipe generation and recommendations, particularly around ingredients.&lt;/p&gt;

&lt;p&gt;This was another lesson for me.&lt;/p&gt;

&lt;p&gt;I don't think every application needs AI.&lt;/p&gt;

&lt;p&gt;Adding an AI API doesn't automatically make a product better.&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;p&gt;Where can AI actually solve a problem for the user?&lt;/p&gt;

&lt;p&gt;For Lutong Simmer, that problem is generating useful recipe-oriented results from context and ingredients.&lt;/p&gt;

&lt;p&gt;What I Learned&lt;/p&gt;

&lt;p&gt;This project taught me to think about context.&lt;/p&gt;

&lt;p&gt;My previous projects taught me different things.&lt;/p&gt;

&lt;p&gt;Train Track made me think about user journeys.&lt;/p&gt;

&lt;p&gt;HackForPinas made me think about data aggregation, security, and automation.&lt;/p&gt;

&lt;p&gt;Lutong Simmer made me think about how software can react to a user's situation.&lt;/p&gt;

&lt;p&gt;The application isn't only asking:&lt;/p&gt;

&lt;p&gt;"What recipes do we have?"&lt;/p&gt;

&lt;p&gt;It's asking:&lt;/p&gt;

&lt;p&gt;"What might make sense for this person right now?"&lt;/p&gt;

&lt;p&gt;That changed how I think about recommendation systems.&lt;/p&gt;

&lt;p&gt;More Than a Recipe App&lt;/p&gt;

&lt;p&gt;Technically, Lutong Simmer could be described as:&lt;/p&gt;

&lt;p&gt;A Kotlin Android application using Jetpack Compose, Room, weather data, and Gemini.&lt;/p&gt;

&lt;p&gt;But that's not really how I think about it.&lt;/p&gt;

&lt;p&gt;I see it as an experiment in combining:&lt;/p&gt;

&lt;p&gt;local culture + contextual data + mobile technology + AI.&lt;/p&gt;

&lt;p&gt;The technology is important.&lt;/p&gt;

&lt;p&gt;But the idea behind the technology matters more.&lt;/p&gt;

&lt;p&gt;What's Next?&lt;/p&gt;

&lt;p&gt;After working on food, I wanted to move into something completely different.&lt;/p&gt;

&lt;p&gt;My next project explores cameras, image processing, and visual computing.&lt;/p&gt;

&lt;p&gt;That's ScreenFrame.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;p&gt;"What should I cook?"&lt;/p&gt;

&lt;p&gt;the next application asks:&lt;/p&gt;

&lt;p&gt;"What can software understand from an image?"&lt;/p&gt;

&lt;p&gt;And that introduced me to a completely different set of engineering problems.&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>ai</category>
      <category>jetpackcompose</category>
    </item>
    <item>
      <title>I Built a Transit App for Metro Manila. Here's What It Taught Me</title>
      <dc:creator>Justine Lopez</dc:creator>
      <pubDate>Wed, 12 Aug 2026 07:24:00 +0000</pubDate>
      <link>https://dev.to/justpres/i-built-a-transit-app-for-metro-manila-heres-what-it-taught-me-k39</link>
      <guid>https://dev.to/justpres/i-built-a-transit-app-for-metro-manila-heres-what-it-taught-me-k39</guid>
      <description>&lt;p&gt;I've always found transportation applications interesting.&lt;/p&gt;

&lt;p&gt;Not because I particularly enjoy looking at maps, but because commuting is one of those situations where &lt;strong&gt;too much information can be just as bad as too little&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You don't want to study a transportation system.&lt;/p&gt;

&lt;p&gt;You just want to get somewhere.&lt;/p&gt;

&lt;p&gt;That was the idea behind one of my projects:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Train Track.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's a native Android application I built around Metro Manila's rail systems.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;Metro Manila has multiple major railway systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LRT-1&lt;/li&gt;
&lt;li&gt;LRT-2&lt;/li&gt;
&lt;li&gt;MRT-3&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For someone who regularly commutes, knowing the stations isn't necessarily the difficult part.&lt;/p&gt;

&lt;p&gt;The difficult part is putting everything together.&lt;/p&gt;

&lt;p&gt;Where do I start?&lt;/p&gt;

&lt;p&gt;Where do I transfer?&lt;/p&gt;

&lt;p&gt;How many stations are left?&lt;/p&gt;

&lt;p&gt;What's happening on my route?&lt;/p&gt;

&lt;p&gt;So instead of thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm going to build a train database."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I started thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I'm going to build something that helps a commuter understand their trip."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That small change in thinking affected almost everything else.&lt;/p&gt;




&lt;h1&gt;
  
  
  Building It With Kotlin
&lt;/h1&gt;

&lt;p&gt;I decided to make Train Track a native Android application.&lt;/p&gt;

&lt;p&gt;The project uses:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kotlin&lt;/li&gt;
&lt;li&gt;Jetpack Compose&lt;/li&gt;
&lt;li&gt;Material 3&lt;/li&gt;
&lt;li&gt;Room&lt;/li&gt;
&lt;li&gt;Kotlin Coroutines&lt;/li&gt;
&lt;li&gt;Flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wanted to use the project as an opportunity to go deeper into native Android development.&lt;/p&gt;

&lt;p&gt;Compose was particularly interesting because the UI is driven by state.&lt;/p&gt;

&lt;p&gt;Instead of thinking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Change this UI element."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I could think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The state changed, so the UI should represent the new state."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That mental model made more sense for an application dealing with dynamic information.&lt;/p&gt;




&lt;h1&gt;
  
  
  The UI Problem I Didn't Expect
&lt;/h1&gt;

&lt;p&gt;At first, I thought more information would automatically make the application better.&lt;/p&gt;

&lt;p&gt;It doesn't.&lt;/p&gt;

&lt;p&gt;Imagine opening a transit app and immediately seeing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;station information&lt;/li&gt;
&lt;li&gt;train specifications&lt;/li&gt;
&lt;li&gt;alerts&lt;/li&gt;
&lt;li&gt;crowding&lt;/li&gt;
&lt;li&gt;route data&lt;/li&gt;
&lt;li&gt;schedules&lt;/li&gt;
&lt;li&gt;track information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything might be useful.&lt;/p&gt;

&lt;p&gt;But not necessarily &lt;strong&gt;right now&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;That's when I started thinking about progressive disclosure.&lt;/p&gt;

&lt;p&gt;Show the important information first.&lt;/p&gt;

&lt;p&gt;Let the user dig deeper when they need it.&lt;/p&gt;

&lt;p&gt;A commuter checking their route shouldn't have to understand the entire system before they can answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Where do I get off?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That became one of the design principles behind the project.&lt;/p&gt;




&lt;h1&gt;
  
  
  Offline Matters More Than I Initially Thought
&lt;/h1&gt;

&lt;p&gt;Train Track also uses Room for local persistence.&lt;/p&gt;

&lt;p&gt;That allows the application to keep useful information locally, such as favorites, searches, settings and cached information.&lt;/p&gt;

&lt;p&gt;This might seem like a normal Android implementation detail.&lt;/p&gt;

&lt;p&gt;But I started seeing it differently.&lt;/p&gt;

&lt;p&gt;A commuter might be underground.&lt;/p&gt;

&lt;p&gt;They might have a weak signal.&lt;/p&gt;

&lt;p&gt;They might have no connection.&lt;/p&gt;

&lt;p&gt;And that's exactly when they may need the application.&lt;/p&gt;

&lt;p&gt;So offline support isn't just a technical feature.&lt;/p&gt;

&lt;p&gt;It's part of the user experience.&lt;/p&gt;




&lt;h1&gt;
  
  
  The Interesting Part: Thinking About the Journey
&lt;/h1&gt;

&lt;p&gt;The biggest shift happened when I stopped thinking about individual features.&lt;/p&gt;

&lt;p&gt;Instead, I thought about the entire journey.&lt;/p&gt;

&lt;p&gt;Imagine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Station A
   ↓
Train
   ↓
Transfer
   ↓
Train
   ↓
Station B
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The user doesn't want five different screens explaining each part.&lt;/p&gt;

&lt;p&gt;They want the application to help answer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What's happening now?"&lt;/p&gt;

&lt;p&gt;"What's next?"&lt;/p&gt;

&lt;p&gt;"What do I need to do?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That made me realize something:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An application can contain complicated information while providing a simple experience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's a principle I want to carry into future projects.&lt;/p&gt;




&lt;h1&gt;
  
  
  What I Learned
&lt;/h1&gt;

&lt;p&gt;Train Track taught me that building software isn't just about choosing technologies.&lt;/p&gt;

&lt;p&gt;It's about translating complexity.&lt;/p&gt;

&lt;p&gt;The transportation network can be complicated.&lt;/p&gt;

&lt;p&gt;The application shouldn't make the commuter feel like they're navigating the complexity themselves.&lt;/p&gt;

&lt;p&gt;That's probably my favorite lesson from this project.&lt;/p&gt;

&lt;p&gt;When I'm building something now, I try to ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"What decision is the user actually trying to make?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;rather than:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"What features can I add?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Those questions lead to very different products.&lt;/p&gt;




&lt;h1&gt;
  
  
  What's Next?
&lt;/h1&gt;

&lt;p&gt;Train Track is only Part 2 of my project series.&lt;/p&gt;

&lt;p&gt;Next, I'm moving from transportation to something completely different:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;HackForPinas.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The problem there isn't navigating trains.&lt;/p&gt;

&lt;p&gt;It's navigating information.&lt;/p&gt;

&lt;p&gt;Hackathons, coding competitions and technology opportunities can be scattered across different websites and communities.&lt;/p&gt;

&lt;p&gt;So I started building a platform to bring those opportunities together.&lt;/p&gt;

&lt;p&gt;And that's where things get considerably more interesting from an engineering perspective.&lt;/p&gt;

&lt;p&gt;Automation.&lt;/p&gt;

&lt;p&gt;Scraping.&lt;/p&gt;

&lt;p&gt;Validation.&lt;/p&gt;

&lt;p&gt;Security.&lt;/p&gt;

&lt;p&gt;Admin workflows.&lt;/p&gt;

&lt;p&gt;More on that in Part 3.&lt;/p&gt;

</description>
      <category>android</category>
      <category>kotlin</category>
      <category>programming</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Things I Built While Figuring Out What Kind of Engineer I Want to Become</title>
      <dc:creator>Justine Lopez</dc:creator>
      <pubDate>Sun, 09 Aug 2026 11:56:11 +0000</pubDate>
      <link>https://dev.to/justpres/things-i-built-while-figuring-out-what-kind-of-engineer-i-want-to-become-1j4j</link>
      <guid>https://dev.to/justpres/things-i-built-while-figuring-out-what-kind-of-engineer-i-want-to-become-1j4j</guid>
      <description>&lt;h2&gt;
  
  
  I Don't Want to Be Known for Knowing Technologies
&lt;/h2&gt;

&lt;p&gt;I've been thinking about something recently.&lt;/p&gt;

&lt;p&gt;As an IT student, it's easy to look at what other developers are doing and feel like you need to know everything.&lt;/p&gt;

&lt;p&gt;React.&lt;/p&gt;

&lt;p&gt;Next.js.&lt;/p&gt;

&lt;p&gt;Flutter.&lt;/p&gt;

&lt;p&gt;Kotlin.&lt;/p&gt;

&lt;p&gt;AI.&lt;/p&gt;

&lt;p&gt;IoT.&lt;/p&gt;

&lt;p&gt;Cloud.&lt;/p&gt;

&lt;p&gt;Databases.&lt;/p&gt;

&lt;p&gt;And then another framework appears.&lt;/p&gt;

&lt;p&gt;So I started asking myself a different question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do I actually want people to remember me for?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I don't have a perfect answer yet.&lt;/p&gt;

&lt;p&gt;But I think my projects are starting to give me one.&lt;/p&gt;

&lt;p&gt;I'm calling this series &lt;strong&gt;"Things I Built While Figuring Out What Kind of Engineer I Want to Become."&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. subukAn: The Project I Haven't Built Yet
&lt;/h2&gt;

&lt;p&gt;This might sound like a strange project to start with.&lt;/p&gt;

&lt;p&gt;I haven't actually built the application.&lt;/p&gt;

&lt;p&gt;And that's intentional.&lt;/p&gt;

&lt;p&gt;subukAn is my idea for a user-testing platform for the Filipino tech community.&lt;/p&gt;

&lt;p&gt;The idea is that developers can pay real testers to evaluate their applications against specific tasks, while testers earn money for completing those tasks.&lt;/p&gt;

&lt;p&gt;My first instinct was to build it.&lt;/p&gt;

&lt;p&gt;Then I stopped.&lt;/p&gt;

&lt;p&gt;I realized I could spend weeks building authentication, dashboards, payments, databases and APIs without knowing whether the basic idea worked.&lt;/p&gt;

&lt;p&gt;So version 0.1 is currently a planning and validation phase.&lt;/p&gt;

&lt;p&gt;I'm trying to answer questions before writing the code.&lt;/p&gt;

&lt;p&gt;Would developers pay for this?&lt;/p&gt;

&lt;p&gt;Would testers participate?&lt;/p&gt;

&lt;p&gt;How should tasks be priced?&lt;/p&gt;

&lt;p&gt;What happens when a tester rejects a task?&lt;/p&gt;

&lt;p&gt;How should disputes work?&lt;/p&gt;

&lt;p&gt;That's probably one of the most useful things I've learned recently:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coding isn't always the first step.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sometimes the first step is finding out what you don't know.&lt;/p&gt;




</description>
      <category>programming</category>
      <category>webdev</category>
      <category>android</category>
      <category>buildinpublic</category>
    </item>
  </channel>
</rss>
