prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$user_id]);
$user = $stmt->fetch();
if (!$user) { header('Location: login.php'); exit; }
$startup_id = (int)($_GET['id'] ?? 0);
$stmt = db()->prepare("SELECT * FROM startups WHERE id = ?");
$stmt->execute([$startup_id]);
$startup = $stmt->fetch();
if (!$startup) { header('Location: startups.php'); exit; }
$platformName = defined('PLATFORM_NAME') ? PLATFORM_NAME : 'Gatsby';
$error = '';
$success = '';
// Check if user is following
$stmt = db()->prepare("SELECT id FROM startup_followers WHERE user_id = ? AND startup_id = ?");
$stmt->execute([$user_id, $startup_id]);
$isFollowing = $stmt->fetch();
// Actions: follow/unfollow, invest, post_update, finish_round, cancel_round
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
if ($_POST['action'] === 'follow') {
$stmt = db()->prepare("INSERT IGNORE INTO startup_followers (user_id, startup_id) VALUES (?, ?)");
$stmt->execute([$user_id, $startup_id]);
if ($stmt->rowCount() > 0) {
$stmt = db()->prepare("UPDATE startups SET followers_count = followers_count + 1 WHERE id = ?");
$stmt->execute([$startup_id]);
}
$success = "You are now following " . $startup['name'] . "!";
} elseif ($_POST['action'] === 'unfollow') {
$stmt = db()->prepare("DELETE FROM startup_followers WHERE user_id = ? AND startup_id = ?");
$stmt->execute([$user_id, $startup_id]);
if ($stmt->rowCount() > 0) {
$stmt = db()->prepare("UPDATE startups SET followers_count = GREATEST(0, followers_count - 1) WHERE id = ?");
$stmt->execute([$startup_id]);
}
$success = "You have unfollowed " . $startup['name'] . ".";
} elseif ($_POST['action'] === 'invest' && $user['role'] === 'investor') {
$amount = (float)($_POST['amount'] ?? 0);
if ($amount > 0) {
$stmt = db()->prepare("SELECT * FROM funding_rounds WHERE startup_id = ? AND status = 'Active'");
$stmt->execute([$startup_id]);
$round = $stmt->fetch();
if ($round) {
$stmt = db()->prepare("INSERT INTO investments (investor_id, startup_id, funding_round_id, amount, status) VALUES (?, ?, ?, ?, 'approved')");
$stmt->execute([$user_id, $startup_id, $round['id'], $amount]);
$stmt = db()->prepare("UPDATE funding_rounds SET funding_raised = funding_raised + ? WHERE id = ?");
$stmt->execute([$amount, $round['id']]);
$stmt = db()->prepare("UPDATE startups SET funding_raised = funding_raised + ? WHERE id = ?");
$stmt->execute([$amount, $startup_id]);
// Create notification for founder
$notif = db()->prepare("INSERT INTO notifications (user_id, content) VALUES (?, ?)");
$notif->execute([$startup['founder_id'], $user['full_name'] . " just invested £" . number_format($amount) . " in " . $startup['name'] . "!"]);
$success = "Investment of £" . number_format($amount) . " successfully processed!";
// Refresh data
$stmt = db()->prepare("SELECT * FROM startups WHERE id = ?");
$stmt->execute([$startup_id]);
$startup = $stmt->fetch();
}
}
} elseif ($_POST['action'] === 'post_update' && $user['role'] === 'founder' && $startup['founder_id'] == $user_id) {
$title = $_POST['update_title'] ?? '';
$content = $_POST['update_content'] ?? '';
if ($title && $content) {
$stmt = db()->prepare("INSERT INTO startup_updates (startup_id, founder_id, title, content) VALUES (?, ?, ?, ?)");
$stmt->execute([$startup_id, $user_id, $title, $content]);
// Notify followers
$stmt = db()->prepare("SELECT user_id FROM startup_followers WHERE startup_id = ?");
$stmt->execute([$startup_id]);
$followers = $stmt->fetchAll(PDO::FETCH_COLUMN);
if (!empty($followers)) {
$notif = db()->prepare("INSERT INTO notifications (user_id, content) VALUES (?, ?)");
foreach ($followers as $f_id) {
$notif->execute([$f_id, "New update from " . $startup['name'] . ": " . $title]);
}
}
$success = "Update posted successfully!";
}
} elseif ($_POST['action'] === 'finish_round' && $user['role'] === 'founder' && $startup['founder_id'] == $user_id) {
$stmt = db()->prepare("UPDATE funding_rounds SET status = 'Closed' WHERE startup_id = ? AND status = 'Active'");
$stmt->execute([$startup_id]);
$success = "Funding round successfully closed!";
} elseif ($_POST['action'] === 'cancel_round' && $user['role'] === 'founder' && $startup['founder_id'] == $user_id) {
db()->beginTransaction();
try {
$stmt = db()->prepare("SELECT id FROM funding_rounds WHERE startup_id = ? AND status = 'Active'");
$stmt->execute([$startup_id]);
$round = $stmt->fetch();
if ($round) {
$stmt = db()->prepare("UPDATE funding_rounds SET status = 'Cancelled' WHERE id = ?");
$stmt->execute([$round['id']]);
$stmt = db()->prepare("UPDATE investments SET status = 'Refunded' WHERE funding_round_id = ?");
$stmt->execute([$round['id']]);
$stmt = db()->prepare("SELECT SUM(amount) as total FROM investments WHERE funding_round_id = ? AND status = 'Refunded'");
$stmt->execute([$round['id']]);
$totalRefunded = $stmt->fetch()['total'] ?? 0;
$stmt = db()->prepare("UPDATE startups SET funding_raised = GREATEST(0, funding_raised - ?) WHERE id = ?");
$stmt->execute([$totalRefunded, $startup_id]);
db()->commit();
$success = "Funding round cancelled and all investments marked for refund.";
$stmt = db()->prepare("SELECT * FROM startups WHERE id = ?");
$stmt->execute([$startup_id]);
$startup = $stmt->fetch();
} else {
db()->rollBack();
$error = "No active round found to cancel.";
}
} catch (Exception $e) {
db()->rollBack();
$error = "Error: " . $e->getMessage();
}
}
}
$stmt = db()->prepare("SELECT * FROM funding_rounds WHERE startup_id = ? AND status = 'Active'");
$stmt->execute([$startup_id]);
$activeRound = $stmt->fetch();
$canSeeHistory = ($user['role'] === 'investor' || ($user['role'] === 'founder' && $startup['founder_id'] == $user_id));
$fundingHistory = [];
if ($canSeeHistory) {
$stmt = db()->prepare("
SELECT i.*, u.full_name as investor_name, u.profile_photo as investor_photo
FROM investments i
JOIN users u ON i.investor_id = u.id
WHERE i.startup_id = ? AND i.status != 'rejected'
ORDER BY i.created_at DESC
");
$stmt->execute([$startup_id]);
$fundingHistory = $stmt->fetchAll();
}
?>
= htmlspecialchars($startup['name']) ?> — = htmlspecialchars($platformName) ?>
= htmlspecialchars($error) ?>
= htmlspecialchars($success) ?>
= substr($startup['name'], 0, 1) ?>
= htmlspecialchars($startup['name']) ?>
= htmlspecialchars($startup['legal_name'] ?? $startup['name']) ?>
= htmlspecialchars($startup['country'] ?? 'N/A') ?>
= htmlspecialchars($startup['industry'] ?? 'General') ?> (= htmlspecialchars($startup['sub_industry'] ?? 'N/A') ?>)
= htmlspecialchars($startup['operational_stage'] ?? 'Seed') ?>
About the Venture
Business Model
= htmlspecialchars($startup['business_model'] ?: $startup['description']) ?>
Product/Service
= htmlspecialchars($startup['product_service'] ?: 'Details coming soon.') ?>
Equity Structure
Total Shares
= number_format($startup['total_shares'] ?? 0) ?>
ESOP Pool
= number_format($startup['esop_percentage'] ?? 0, 1) ?>%
Founder Ownership
= nl2br(htmlspecialchars($startup['founder_ownership'] ?: 'N/A')) ?>
Investor Ownership
= nl2br(htmlspecialchars($startup['investor_ownership'] ?: 'N/A')) ?>
Convertible Instruments
= nl2br(htmlspecialchars($startup['convertible_instruments'] ?: 'None reported.')) ?>
Financial Position & Docs
Current Cash Balance
£= number_format($startup['current_cash_balance'] ?? 0, 2) ?>
Monthly Burn Rate
£= number_format($startup['burn_rate'] ?? 0, 2) ?>
Historical Documentation
$startup['doc_income_statements'],
'Balance Sheets' => $startup['doc_balance_sheets'],
'Cash Flow' => $startup['doc_cash_flow_statements'],
'Revenue Breakdown' => $startup['doc_revenue_breakdown'],
'Gross Margin' => $startup['doc_gross_margin'],
'OpEx Breakdown' => $startup['doc_opex_breakdown']
];
foreach ($docs as $label => $path): if ($path):
?>
= $label ?>
Expected Investor Returns
Platform Recommendation
= number_format($startup['recommended_return_rate'] ?? 5.0, 1) ?>%
AI analysis based on uploaded financials
Founder's Proposal
= $startup['founder_return_rate'] !== null ? number_format($startup['founder_return_rate'], 1) . '%' : 'N/A' ?>
Target annual dividend yield set by founder
Funding History
No investment history available yet.
= substr($inv['investor_name'], 0, 1) ?>
= htmlspecialchars($inv['investor_name']) ?>
= date('M d, Y', strtotime($inv['created_at'])) ?>
£= number_format($inv['amount']) ?>
Venture Financials
£= number_format($startup['funding_raised']) ?>
Total Raised All-Time
= count($fundingHistory) ?>
Investments
= $startup['followers_count'] ?? 0 ?>
Followers
= htmlspecialchars($startup['operational_stage'] ?: 'Seed') ?>
Stage
Active Round
0) ? min(100, ($activeRound['funding_raised'] / $activeRound['funding_goal']) * 100) : 0; ?>
£= number_format($activeRound['funding_raised']) ?>
£= number_format($activeRound['funding_goal']) ?> target
Founder
prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$startup['founder_id']]);
$founder = $stmt->fetch();
?>
= substr($founder['full_name'] ?? 'U', 0, 1) ?>
= htmlspecialchars($founder['full_name'] ?? 'Founder') ?>
= htmlspecialchars($founder['university'] ?? 'University') ?>
Send Message