๐ฏ 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. ๐ฑ








Top comments (0)