FRE-651: CEO coordination notes for founder bio/headshot assets

This commit is contained in:
2026-04-26 07:41:45 -04:00
parent 3d5ff8650c
commit 5f4eb60a98
476 changed files with 67971 additions and 125 deletions

68
scripts/load-test.js Normal file
View File

@@ -0,0 +1,68 @@
// Simple load test for FRE-634: Launch Week Technical Readiness
// Tests concurrent user handling
import http from 'http';
const CONFIG = {
baseUrl: process.env.BASE_URL || 'http://localhost:3000',
concurrentUsers: 1000,
testDurationMs: 60000,
endpoints: [
'/',
'/api/projects',
'/api/characters',
'/api/revisions'
]
};
async function makeRequest(endpoint) {
return new Promise((resolve, reject) => {
const start = Date.now();
http.get(`${CONFIG.baseUrl}${endpoint}`, (res) => {
resolve({
endpoint,
statusCode: res.statusCode,
duration: Date.now() - start
});
}).on('error', (err) => {
reject({ endpoint, error: err.message });
});
});
}
async function loadTest() {
console.log(`Starting load test: ${CONFIG.concurrentUsers} users, ${CONFIG.testDurationMs}ms`);
console.log(`Target: ${CONFIG.baseUrl}`);
const results = [];
const startTime = Date.now();
while (Date.now() - startTime < CONFIG.testDurationMs) {
const promises = [];
for (let i = 0; i < CONFIG.concurrentUsers; i++) {
const endpoint = CONFIG.endpoints[i % CONFIG.endpoints.length];
promises.push(makeRequest(endpoint));
}
const batchResults = await Promise.all(promises);
results.push(...batchResults);
}
const successRate = results.filter(r => r.statusCode === 200).length / results.length * 100;
const avgDuration = results.reduce((a, b) => a + b.duration, 0) / results.length;
console.log(`\nResults:`);
console.log(`- Total requests: ${results.length}`);
console.log(`- Success rate: ${successRate.toFixed(2)}%`);
console.log(`- Average latency: ${avgDuration.toFixed(2)}ms`);
console.log(`- Max concurrent: ${CONFIG.concurrentUsers}`);
return {
totalRequests: results.length,
successRate,
avgLatency: avgDuration,
maxConcurrent: CONFIG.concurrentUsers
};
}
loadTest().catch(console.error);