diff --git a/assets/js/main.js b/assets/js/main.js
index 61c2754..3cf79d0 100644
--- a/assets/js/main.js
+++ b/assets/js/main.js
@@ -1,72 +1,65 @@
-const pages = ['home','problem','why','features','how','roi','pricing','who','trust','roadmap','faq','signin','apply'];
+const pages = ['home', 'problem', 'why', 'features', 'how', 'roi', 'pricing', 'who', 'trust', 'roadmap', 'faq', 'signin', 'apply'];
-document.addEventListener('DOMContentLoaded', () => {
- // Set initial page based on URL hash or default to 'home'
- const initialPage = window.location.hash.substring(1) || 'home';
- openPage(initialPage, true);
-
- // Handle back/forward navigation
- window.addEventListener('popstate', (event) => {
- const pageId = event.state ? event.state.page : 'home';
- openPage(pageId, true);
- });
-
- // Check for query params like ?status=applied and switch to the right page
- const urlParams = new URLSearchParams(window.location.search);
- if (urlParams.has('status') || urlParams.has('error')) {
- openPage('apply', true);
- }
-});
-
-function openPage(pageId, isHistoryNavigation = false) {
+function openPage(pageId) {
if (!pages.includes(pageId)) {
- pageId = 'home';
+ console.warn(`Attempted to navigate to a non-existent page: ${pageId}`);
+ return; // Do not proceed if the page is not in the allowed list
}
-
+
// Hide all pages
- document.querySelectorAll('.page').forEach(page => {
- page.classList.add('hidden');
+ document.querySelectorAll('.page').forEach(p => {
+ p.classList.add('hidden');
});
- // Show the target page
- const targetPage = document.getElementById(`page-${pageId}`);
- if (targetPage) {
- targetPage.classList.remove('hidden');
+ // Show the active page
+ const activePage = document.getElementById('page-' + pageId);
+ if (activePage) {
+ activePage.classList.remove('hidden');
} else {
- // Fallback to home if page not found
+ // If no specific page content, default to home
document.getElementById('page-home').classList.remove('hidden');
- pageId = 'home';
}
- // Update nav links
+ // Update active link styling
document.querySelectorAll('.navlink').forEach(link => {
- // Use endsWith to correctly match hrefs like '/#home' and '#home'
- if (link.getAttribute('href').endsWith(`#${pageId}`)) {
+ if (link.dataset.page === pageId) {
link.classList.add('active');
} else {
link.classList.remove('active');
}
});
- // Construct the new URL, preserving the base path
- const newUrl = window.location.pathname + `#${pageId}`;
-
- if (!isHistoryNavigation) {
- // Create a new history state
- history.pushState({ page: pageId }, null, newUrl);
- } else {
- // If it IS history navigation, we might need to clean up query params from the URL
- if (window.location.search) {
- history.replaceState({ page: pageId }, null, newUrl);
- }
- }
+ // Smooth scroll to top
+ window.scrollTo({ top: 0, behavior: 'smooth' });
}
-function toggleMenu(forceClose = false) {
- const drawer = document.getElementById('drawer');
- if (forceClose || !drawer.classList.contains('hidden')) {
- drawer.classList.add('hidden');
- } else {
- drawer.classList.remove('hidden');
- }
-}
+document.addEventListener('DOMContentLoaded', () => {
+ const navLinksContainer = document.getElementById('nav-links');
+ const mobileMenuContainer = document.getElementById('mobile-menu');
+ const menuButton = document.getElementById('menu-button');
+
+ // Generate navigation links
+ let navHTML = '';
+ pages.forEach(page => {
+ navHTML += `${page.charAt(0).toUpperCase() + page.slice(1)} `;
+ });
+ navLinksContainer.innerHTML = navHTML;
+ mobileMenuContainer.innerHTML = navHTML.replace(/class="/g, 'class="block w-full text-left ');
+
+ // Handle navigation clicks
+ document.querySelectorAll('.navlink').forEach(link => {
+ link.addEventListener('click', (e) => {
+ e.preventDefault();
+ openPage(link.dataset.page);
+ });
+ });
+
+ // Toggle mobile menu
+ menuButton.addEventListener('click', () => {
+ mobileMenuContainer.classList.toggle('hidden');
+ });
+
+ // Open page based on hash or default to 'home'
+ const initialPage = window.location.hash.substring(1) || 'home';
+ openPage(initialPage);
+});
\ No newline at end of file
diff --git a/index.php b/index.php
index 0ae9488..915ea0b 100644
--- a/index.php
+++ b/index.php
@@ -1,223 +1,191 @@
-
-
- FinMox — HR Execution Operating System
-
-
-
-
-
+
+
+ FinMox — HR Execution Operating System
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- HR execution control — not another HR tool
-
-
-
- FinMox sits on top of your existing stack and controls how hiring decisions get executed — so teams move faster, stay consistent, and reduce risk without replacing your ATS or HR team .
-
-
-
- 1–10 roles/month
- 50–300 candidates/role
- Multiple stakeholders
- Human-in-the-loop by design
- Audit-ready recordkeeping
-
-
-
FinMox controls the flow of labor decisions.
-
- Humans define intent → systems enforce execution → agents remove friction → data creates defensibility.
-
-
-
-
-
-
-
-
Execution Control (Live)
-
- Live
-
-
-
-
-
-
-
1. Define Intent
-
Hiring managers define roles & requirements.
-
-
-
-
-
-
2. Enforce Execution
-
FinMox ensures every step is followed.
-
-
-
-
-
-
3. Remove Friction
-
AI agents automate scheduling & screening.
-
-
-
-
-
-
4. Create Defensibility
-
Generate audit-ready logs automatically.
-
-
-
-
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
+ Now in private beta
+
+
+
+ FinMox is an intelligent enterprise system that automates HR, compliance, and operations.
+ Finally, a way to control the entire lifecycle — from role intake to offer letter.
+
+
+
+
+
+
+
+
Role Intake
+
Criteria Locked
+
+ Hiring intent standardized. Versioned. No drift.
+
+
+ Stakeholders
+ Rubric
+ Scope freeze
+
+
+
+
Structured Qualification
+
Consistent Evaluation
+
+ Same criteria. Required steps. Overrides recorded.
+
+
+ Scoring
+ Notes
+ Rationale
+
+
+
+
Candidate Movement
+
No Operational Drag
+
+ Scheduling + follow-ups handled automatically.
+
+
+ SLAs
+ Nudges
+ Status
+
+
+
+
Decision Trail
+
Defensible Record
+
+ Who decided, when, why, under which criteria version.
+
+
+ Timestamped
+ Versioned
+ Exportable
+
+
+
+
+
+
+
+
+
+
+
+ What FinMox does
+
+
+
+ FinMox enforces role clarity, structured qualification, and automatic outputs so teams move faster without adding risk, headcount, or chaos.
+
+
+
+
+
+
+
Candidate Ranking
+
+ Every candidate is scored against your role criteria so decisions don’t drift.
+
+
+ Parsing
+ Scoring
+ Shortlists
+
+
+
+
+
+
Interview Automation
+
+ Role-specific questions, summaries, and recommendations — reviewable and exportable.
+
+
+ Question sets
+ Summaries
+ Recommendations
+
+
+
+
+
+
Compliance & Analytics
+
+ Track performance, risk, and compliance in real-time without manual data entry.
+
+
+ Dashboards
+ Audit trails
+ Alerts
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+