Initial commit: AI Recruitment Site for Ryans Recruit Firm

- Complete PostgreSQL schema with migrations
- Node.js/Express backend with authentication
- Public website (home, about, services, jobs, apply, contact)
- Admin dashboard with applicant and job management
- CV upload and storage in PostgreSQL BYTEA
- Docker Compose setup for deployment
- Session-based authentication
- Responsive design with Ryan brand colors
This commit is contained in:
Mikael Westöö
2026-01-23 21:17:24 +01:00
commit 406d278a39
23 changed files with 3842 additions and 0 deletions

171
public/apply.html Normal file
View File

@@ -0,0 +1,171 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Apply for Job - Ryans Recruit Firm</title>
<link rel="stylesheet" href="/css/styles.css">
</head>
<body>
<header>
<nav class="container">
<div class="logo">Ryans Recruit Firm</div>
<ul class="nav-links">
<li><a href="/">Home</a></li>
<li><a href="/about.html">About</a></li>
<li><a href="/services.html">Services</a></li>
<li><a href="/jobs.html">Jobs</a></li>
<li><a href="/contact.html">Contact</a></li>
<li><a href="/admin/login.html" class="btn btn-primary btn-sm">Admin</a></li>
</ul>
</nav>
</header>
<section class="hero">
<div class="container">
<h1>Apply Now</h1>
<p>Submit your application for consideration</p>
</div>
</section>
<section>
<div class="container-narrow">
<div id="job-details" style="background: var(--bg-white); padding: 2rem; border-radius: 0.5rem; box-shadow: var(--shadow-md); margin-bottom: 2rem;">
<h2 id="job-title" style="color: var(--secondary-color); margin-bottom: 1rem;">Job Title</h2>
<div id="job-info" style="color: var(--text-light);">
<!-- Job details will be loaded here -->
</div>
</div>
<div style="background: var(--bg-white); padding: 2rem; border-radius: 0.5rem; box-shadow: var(--shadow-md);">
<h3 style="color: var(--secondary-color); margin-bottom: 2rem;">Application Form</h3>
<form id="application-form">
<!-- Hidden jobId field -->
<input type="hidden" id="jobId" name="jobId" value="">
<!-- Full Name -->
<div class="form-group">
<label for="fullName">Full Name <span style="color: var(--error);">*</span></label>
<input type="text" id="fullName" name="fullName" required placeholder="Enter your full name">
</div>
<!-- Email -->
<div class="form-group">
<label for="email">Email Address <span style="color: var(--error);">*</span></label>
<input type="email" id="email" name="email" required placeholder="your.email@example.com">
</div>
<!-- Phone -->
<div class="form-group">
<label for="phone">Phone Number</label>
<input type="tel" id="phone" name="phone" placeholder="+1 (555) 123-4567">
</div>
<!-- LinkedIn URL -->
<div class="form-group">
<label for="linkedinUrl">LinkedIn URL</label>
<input type="url" id="linkedinUrl" name="linkedinUrl" placeholder="https://linkedin.com/in/yourprofile">
</div>
<!-- Portfolio URL -->
<div class="form-group">
<label for="portfolioUrl">Portfolio URL</label>
<input type="url" id="portfolioUrl" name="portfolioUrl" placeholder="https://yourportfolio.com">
</div>
<!-- Years of Experience -->
<div class="form-group">
<label for="yearsExperience">Years of Experience</label>
<input type="number" id="yearsExperience" name="yearsExperience" min="0" max="70" placeholder="0">
</div>
<!-- Current Position -->
<div class="form-group">
<label for="currentPosition">Current Position</label>
<input type="text" id="currentPosition" name="currentPosition" placeholder="e.g., Senior Software Engineer">
</div>
<!-- Current Company -->
<div class="form-group">
<label for="currentCompany">Current Company</label>
<input type="text" id="currentCompany" name="currentCompany" placeholder="e.g., Tech Corp Inc.">
</div>
<!-- Preferred Location -->
<div class="form-group">
<label for="preferredLocation">Preferred Location</label>
<input type="text" id="preferredLocation" name="preferredLocation" placeholder="e.g., New York, NY or Remote">
</div>
<!-- Cover Letter -->
<div class="form-group">
<label for="coverLetter">Cover Letter</label>
<textarea id="coverLetter" name="coverLetter" placeholder="Tell us why you're interested in this position and what makes you a great fit..."></textarea>
</div>
<!-- CV Upload -->
<div class="form-group">
<label for="cv">Upload CV/Resume <span style="color: var(--error);">*</span></label>
<input type="file" id="cv" name="cv" accept=".pdf,.doc,.docx" required>
<div class="form-help">Accepted formats: PDF, DOC, DOCX (Max 5MB)</div>
</div>
<!-- Submit Button -->
<div class="form-group" style="margin-top: 2rem;">
<button type="submit" class="btn btn-primary btn-lg" style="width: 100%;">Submit Application</button>
</div>
</form>
</div>
</div>
</section>
<footer>
<div class="container">
<div class="footer-content">
<div class="footer-section">
<h3>Ryans Recruit Firm</h3>
<p style="color: rgba(255, 255, 255, 0.8);">
Your trusted partner in career advancement and talent acquisition.
</p>
</div>
<div class="footer-section">
<h3>Quick Links</h3>
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about.html">About Us</a></li>
<li><a href="/services.html">Services</a></li>
<li><a href="/jobs.html">Job Listings</a></li>
<li><a href="/contact.html">Contact</a></li>
</ul>
</div>
<div class="footer-section">
<h3>For Employers</h3>
<ul>
<li><a href="/contact.html">Post a Job</a></li>
<li><a href="/contact.html">Our Process</a></li>
<li><a href="/contact.html">Pricing</a></li>
</ul>
</div>
<div class="footer-section">
<h3>Contact</h3>
<ul>
<li>Email: info@ryansrecruit.com</li>
<li>Phone: +1 (555) 123-4567</li>
<li>Hours: Mon-Fri 9AM-6PM EST</li>
</ul>
</div>
</div>
<div class="footer-bottom">
<p>&copy; 2026 Ryans Recruit Firm. All rights reserved.</p>
</div>
</div>
</footer>
<script src="/js/main.js"></script>
</body>
</html>