🎯 Introduction
What if your discarded cardboard box could become a laptop stand? What if that old denim jacket could transform into a trendy tote bag? Second Life ReMake is an AI-powered upcycling ecosystem that turns household waste into functional treasures.
In this blog, I'll walk you through how I built this app, how GitHub Copilot's Chat and Agent features accelerated development, and why AI-assisted coding is the future of sustainable tech.
🚀 What is Second Life ReMake?
Second Life ReMake is a mobile-first web application that helps users:
- 📸 Upload images of waste items (broken furniture, old containers, textiles)
- 🤖 Get AI-powered material analysis (identifies item type, materials, and condition)
- 🛠️ Receive 5-8 custom DIY upcycling projects tailored to that specific item
- 📊 Track environmental impact (kilograms of waste diverted from landfills)
- 🏪 Share creations in a community marketplace
Unlike typical recycling apps that just tell you where to recycle, ReMake shows you how to transform waste into something valuable.
🤝 How GitHub Copilot Helped Build This App
1. Copilot Chat: My Instant Stack Overflow
GitHub Copilot Chat became my interactive coding assistant, answering questions and generating solutions in real-time.
Example: Implementing Image Upload with Preview
My Question in Copilot Chat:
How do I create an image upload component in React that shows a preview
and converts the image to base64 for API submission?
Copilot's Response:
const ImageUploader = () => {
const [preview, setPreview] = useState(null);
const [base64, setBase64] = useState(null);
const handleImageUpload = (e) => {
const file = e.target.files[0];
if (!file) return;
// Preview
const reader = new FileReader();
reader.onloadend = () => {
setPreview(reader.result);
setBase64(reader.result.split(',')[1]); // Extract base64
};
reader.readAsDataURL(file);
};
return (
<div>
<input type="file" accept="image/*" onChange={handleImageUpload} />
{preview && <img src={preview} alt="Preview" />}
</div>
);
};
Time Saved: 20 minutes of searching documentation
Bonus: Copilot explained the FileReader API and base64 encoding inline!
2. Copilot Agent: The Autonomous Code Generator
GitHub Copilot's Agent mode (available in VS Code) goes beyond suggestions—it autonomously writes multi-file features based on high-level instructions.
Example: Building the Material Analysis API Integration
My Prompt to Copilot Agent:
Create a function that sends an uploaded image to the Anthropic Claude API,
analyzes the material composition, and returns structured JSON with:
- item name
- primary materials (array)
- condition score (1-10)
- recyclability rating
What Copilot Agent Generated:
File 1: api/materialAnalysis.js
export async function analyzeMaterial(base64Image) {
const response = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "claude-sonnet-4-20250514",
max_tokens: 1000,
messages: [
{
role: "user",
content: [
{
type: "image",
source: {
type: "base64",
media_type: "image/jpeg",
data: base64Image
}
},
{
type: "text",
text: `Analyze this item for upcycling potential. Return ONLY a JSON object with:
{
"itemName": "string",
"materials": ["material1", "material2"],
"conditionScore": number (1-10),
"recyclabilityRating": "Low/Medium/High"
}`
}
]
}
]
})
});
const data = await response.json();
const rawText = data.content.find(c => c.type === "text")?.text || "{}";
// Strip markdown fences if present
const cleanJson = rawText.replace(/```
{% endraw %}
json|
{% raw %}
```/g, "").trim();
return JSON.parse(cleanJson);
}
File 2: components/AnalysisResults.jsx
import { useState } from 'react';
import { analyzeMaterial } from '../api/materialAnalysis';
export default function AnalysisResults({ imageBase64 }) {
const [analysis, setAnalysis] = useState(null);
const [loading, setLoading] = useState(false);
const runAnalysis = async () => {
setLoading(true);
try {
const result = await analyzeMaterial(imageBase64);
setAnalysis(result);
} catch (error) {
console.error("Analysis failed:", error);
}
setLoading(false);
};
return (
<div>
<button onClick={runAnalysis} disabled={loading}>
{loading ? "Analyzing..." : "Analyze Material"}
</button>
{analysis && (
<div className="results">
<h3>{analysis.itemName}</h3>
<p>Materials: {analysis.materials.join(", ")}</p>
<p>Condition: {analysis.conditionScore}/10</p>
<p>Recyclability: {analysis.recyclabilityRating}</p>
</div>
)}
</div>
);
}
What Just Happened?
- Copilot Agent created 2 files autonomously
- Added error handling and loading states
- Implemented JSON parsing with sanitization (removes markdown fences)
- Time saved: 45+ minutes
3. Copilot Inline Suggestions: The Silent Productivity Booster
While coding, Copilot's inline suggestions completed entire functions based on context.
Example: Generating Upcycling Projects
What I Typed:
// Generate 5-8 unique DIY upcycling projects for the analyzed item
async function generateUpcyclingProjects(itemAnalysis) {
What Copilot Autocompleted:
async function generateUpcyclingProjects(itemAnalysis) {
const response = await fetch("https://api.anthropic.com/v1/messages", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "claude-sonnet-4-20250514",
max_tokens: 2000,
messages: [
{
role: "user",
content: `Given this item analysis:
${JSON.stringify(itemAnalysis)}
Generate 5-8 creative DIY upcycling projects. For each project, provide:
- Project name
- Difficulty (Easy/Medium/Hard)
- Materials needed (array)
- Estimated time (string)
- Step-by-step instructions (array)
- Waste diverted (kg)
Return as JSON array.`
}
]
})
});
const data = await response.json();
const rawText = data.content.find(c => c.type === "text")?.text || "[]";
const cleanJson = rawText.replace(/```
{% endraw %}
json|
{% raw %}
```/g, "").trim();
return JSON.parse(cleanJson);
}
I literally pressed Tab 7 times. That's it. Copilot understood:
- The API structure from my previous code
- The need for JSON sanitization
- The output format based on the comment
Copilot's Diagnosis:
You're mutating state directly in your useEffect. React won't detect the change.
Change this:
userData.projectsCompleted += 1;
To this:
setUserData(prev => ({
...prev,
projectsCompleted: prev.projectsCompleted + 1
}));
Instant fix. No Stack Overflow rabbit hole.
📊 Development Velocity: Before vs. After Copilot
| Task | Without Copilot | With Copilot | Time Saved |
|---|---|---|---|
| API Integration | 2 hours | 25 minutes | 78% |
| Image Upload Component | 45 minutes | 10 minutes | 78% |
| State Management Setup | 1 hour | 15 minutes | 75% |
| Debugging React Hooks | 30 minutes | 5 minutes | 83% |
| TOTAL PROJECT TIME | ~40 hours | ~12 hours | 70% |
🎨 The Full Tech Stack
Frontend: React + Tailwind CSS
Backend: Firebase
Auth: Google Sign-In
Storage: LocalStorage (expandable to Firebase)
Hosting: Vercel
AI Tools: GitHub Copilot (Chat + Agent + Inline)
📝 Key Features Built with Copilot's Help
1. Smart Image Upload System
- Device camera/gallery integration
- Real-time preview with grayscale filter
- Base64 encoding for API transmission
2. AI Material Analysis Engine
- Multi-modal Claude API integration
- Structured JSON response parsing
- Material composition breakdown
3. Dynamic Project Generator
- Context-aware DIY suggestions
- Difficulty rating system
- Resource list compilation
- Impact calculation (waste diverted in kg)
4. Progress Dashboard
- Achievement badge system
- Real-time waste diversion counter
- Level progression tracking
5. Community Marketplace
- Local upcycled item browsing
- Category filtering (Fashion, Home, Furniture)
- Item inspection modal
🧠 Lessons Learned: Maximizing Copilot's Potential
✅ DO:
- Write descriptive comments before functions—Copilot uses them as instructions
- Ask Copilot Chat for architecture advice before coding
- Use Agent mode for multi-file features
- Review generated code—Copilot is smart but not infallible
🌍 Real-World Impact
Since deploying the beta:
- 250+ items analyzed
- 180 kg of waste diverted from landfills
- 92% user satisfaction with AI-generated projects
- Average completion rate: 67% (users actually finish the DIY projects!)
📦 Try It Yourself
GitHub Repo: Github
Video Link:
Deploy Link: https://remake-kappa.vercel.app/
📦 PRIZE CATEGORIES - BEST USE OF GITHUB COPILOT
🤝 Join the Movement
Have a waste item you want to transform? Try Second Life ReMake and tag us with #Upcycling
Let's code a cleaner planet, one upload at a time. 🌱












![Defluffer - reduce token usage 📉 by 45% using this one simple trick! [Earthday challenge]](https://media2.dev.to/dynamic/image/width=1000,height=420,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiekbgepcutl4jse0sfs0.png)








