, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
, ,
Loading...
Loading...
{
"latency": 855,
"ipAddresses": [
"104.21.32.1",
"104.21.16.1",
"104.21.96.1",
"104.21.64.1",
"104.21.48.1",
"104.21.80.1",
"104.21.112.1",
"2606:4700:3030::6815:7001",
"2606:4700:3030::6815:5001",
"2606:4700:3030::6815:2001",
"2606:4700:3030::6815:6001",
"2606:4700:3030::6815:1001",
"2606:4700:3030::6815:3001",
"2606:4700:3030::6815:4001"
],
"dns": {
"NS": [
"cory.ns.cloudflare.com.",
"tara.ns.cloudflare.com."
],
"A": [
"104.21.32.1",
"104.21.16.1",
"104.21.96.1",
"104.21.64.1",
"104.21.48.1",
"104.21.80.1",
"104.21.112.1"
],
"AAAA": [
"2606:4700:3030::6815:7001",
"2606:4700:3030::6815:5001",
"2606:4700:3030::6815:2001",
"2606:4700:3030::6815:6001",
"2606:4700:3030::6815:1001",
"2606:4700:3030::6815:3001",
"2606:4700:3030::6815:4001"
],
"TXT": [
"v=spf1 -all"
]
}
}
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>frankwork.net</title>
<!-- Favicon -->
<link rel="icon" type="image/x-icon" href="/favicon.ico">
<!-- Bootstrap 5.3.0 CSS -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet">
<!-- Bootstrap Icons -->
<link href="https://cdn.jsdelivr.net/npm/[email protected]/font/bootstrap-icons.css" rel="stylesheet">
<!-- Custom CSS -->
<link href="https://frankwork.net/css/style.css?20250207231325" rel="stylesheet">
<link href="https://frankwork.net/css/themes.css?20250207231325" rel="stylesheet">
<!--
<link href="https://frankwork.net/css/style.css" rel="stylesheet">
<link href="https://frankwork.net/css/themes.css" rel="stylesheet">
-->
</head>
<body style="background-color: var(--bg-primary);" >
<nav class="navbar navbar-expand-lg" style="background-color: var(--bg-primary);">
<div class="container">
<div class="d-flex flex-column">
<a class="navbar-brand" href="/">
<text style="font-family: source-serif-4-variable; font-variation-settings: 'wght' 400; font-size: 2.5rem;"></text>
<text style="font-family: source-serif-4-variable; font-variation-settings: 'wght' 400; font-size: 2.5rem;">frank</text><text style="font-family: source-sans-3-variable; font-variation-settings: 'wght' 900; font-size: 2.3rem;">work</text>
</a>
<h6 class="text-muted text-center" style="margin-top: -20px;">Tri-cities Work Community</h6>
</div>
<form id="headerSearchForm" action="/services/search" method="GET">
<div class="input-group" style="max-width: 600px;">
<input type="text"
name="service_query"
class="form-control"
placeholder="What work do you need?"
value="">
<select name="service_category" class="form-select" id="headerCategoryFilter">
<option value="">All Categories</option>
<option value="67"
>
3D Modeling & Animation </option>
<option value="57"
>
Acupuncture </option>
<option value="21"
>
Appliance Repair </option>
<option value="66"
>
Astrology & Tarot Reading </option>
<option value="13"
>
Automotive Services </option>
<option value="56"
>
Bartending </option>
<option value="18"
>
Beauty & Personal Care </option>
<option value="47"
>
Career Coaching </option>
<option value="8"
>
Carpentry </option>
<option value="29"
>
Catering </option>
<option value="16"
>
Child Care </option>
<option value="2"
>
Cleaning </option>
<option value="54"
>
Courier Services </option>
<option value="39"
>
Custom Art & Crafts </option>
<option value="68"
>
Cybersecurity Consulting </option>
<option value="52"
>
Drone Photography </option>
<option value="62"
>
Eco-Friendly Cleaning </option>
<option value="40"
>
Elderly Care </option>
<option value="6"
>
Electrical </option>
<option value="45"
>
Event Photography </option>
<option value="19"
>
Event Planning </option>
<option value="33"
>
Financial Planning </option>
<option value="27"
>
Furniture Assembly </option>
<option value="3"
>
Gardening & Landscaping </option>
<option value="34"
>
Graphic Design </option>
<option value="7"
>
Handyman </option>
<option value="15"
>
Health & Wellness </option>
<option value="1"
>
Home Improvement </option>
<option value="48"
>
Home Staging </option>
<option value="69"
>
Home Theater Installation </option>
<option value="22"
>
HVAC Services </option>
<option value="31"
>
Interior Design </option>
<option value="64"
>
Interior Painting </option>
<option value="12"
>
IT & Computer Services </option>
<option value="37"
>
Language Translation </option>
<option value="25"
>
Laundry & Dry Cleaning </option>
<option value="32"
>
Legal Consulting </option>
<option value="38"
>
Life Coaching </option>
<option value="42"
>
Massage Therapy </option>
<option value="51"
>
Mobile Car Detailing </option>
<option value="11"
>
Moving & Transportation </option>
<option value="36"
>
Music Lessons </option>
<option value="43"
>
Nutrition Consulting </option>
<option value="9"
>
Painting </option>
<option value="4"
>
Personal Assistance </option>
<option value="49"
>
Personal Chef </option>
<option value="70"
>
Personal Shopper </option>
<option value="10"
>
Pest Control </option>
<option value="17"
>
Pet Care </option>
<option value="65"
>
Pet Training </option>
<option value="20"
>
Photography </option>
<option value="5"
>
Plumbing </option>
<option value="53"
>
Proofreading & Editing </option>
<option value="50"
>
Property Management </option>
<option value="60"
>
Public Speaking Coaching </option>
<option value="28"
>
Real Estate Services </option>
<option value="46"
>
Resume Writing </option>
<option value="23"
>
Roofing </option>
<option value="26"
>
Security Services </option>
<option value="30"
>
Sewing & Alterations </option>
<option value="61"
>
Singing Lessons </option>
<option value="58"
>
Tattoo Art </option>
<option value="63"
>
Tree Trimming </option>
<option value="14"
>
Tutoring & Education </option>
<option value="55"
>
Video Production </option>
<option value="59"
>
Voice Over Services </option>
<option value="44"
>
Waste Removal </option>
<option value="35"
>
Web Development </option>
<option value="24"
>
Window Cleaning </option>
<option value="41"
>
Yoga Instruction </option>
</select>
<button class="btn btn-primary" type="submit" id="headerSearchButton">
<i class="bi bi-search"></i>
</button>
</div>
</form>
<div class="collapse navbar-collapse" id="navbarMain">
<ul class="navbar-nav me-auto">
</ul>
<div class="d-flex">
<a href="/signup" class="btn btn-warning me-2 serif"><i class="bi bi-door-open"></i> Login</a>
</div>
</div>
</div>
</nav>
<div class="container mt-4">
<div class="container text-center py-5 col-md-6">
<div class="card">
<div class="card-body card-no-header mb-3">
<h1 class="display-1">404</h1>
<h2 class="mb-4">Page Not Found</h2>
<p class="lead mb-4">The page you are looking for does not exist or has been moved.</p>
<a href="/" class="btn btn-primary mb-3">Return Home</a>
</div>
</div>
</div>
</main>
<footer class="footer mt-auto py-3" style="background-color: var(--bg-primary); color: var(--text-primary);">
<div class="container">
<div class="row">
<div class="col-md-6">
<h5>About Us</h5>
<p>Frankwork is a non-profit platform to connect people who need help with people who can.
Our vision is to create a safe environment where people can work together honestly and transparently. We do this by making all interactions and transactions visible everyone.</p>
</div>
<div class="col-md-3" style="text-align: right;">
<h5>Quick Links</h5>
<ul class="list-unstyled">
<li><a href="/joinfrankwork">Jobs at Frankwork</a></li>
<li><a href="/faq">FAQ</a></li>
</ul>
</div>
<div class="col-md-3" style="text-align: right;">
<h5>Legal</h5>
<ul class="list-unstyled">
<li><a href="/terms">Terms of Service</a></li>
<li><a href="/privacy">Privacy Policy</a></li>
</ul>
</div>
</div>
<hr class="my-4">
<div class="row">
<div class="col-12 text-center">
<p class="mb-0">
© 2025 frankwork.net. All rights reserved.
</p>
</div>
</div>
</div>
</footer>
<!-- Bootstrap JS Bundle with Popper -->
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Initialize all interactive elements
initializeFavorites();
initializeSearch();
// Only initialize session timeout for logged-in users
// Favorites functionality
function initializeFavorites() {
// Initial binding
bindFavoriteButtons();
// Also bind when search results are updated
const searchResults = document.getElementById('searchResults');
if (searchResults) {
const observer = new MutationObserver(() => {
bindFavoriteButtons();
});
observer.observe(searchResults, {
childList: true,
subtree: true
});
}
}
function bindFavoriteButtons() {
const favoriteButtons = document.querySelectorAll('.favorite-btn');
console.log('Found favorite buttons:', favoriteButtons.length);
favoriteButtons.forEach(button => {
// Remove existing listener to prevent duplicates
button.removeEventListener('click', handleFavoriteClick);
// Add new listener
button.addEventListener('click', handleFavoriteClick);
console.log('Button data:', {
serviceId: button.dataset.serviceId,
csrfToken: button.dataset.csrfToken
});
});
}
async function handleFavoriteClick(e) {
e.preventDefault();
const serviceId = this.dataset.serviceId;
const csrfToken = this.dataset.csrfToken;
const heartIcon = this.querySelector('i');
console.log('Click handler triggered:', {
serviceId,
csrfToken,
heartIcon
});
if (!serviceId || !csrfToken) {
console.error('Missing required data attributes');
return;
}
try {
console.log('Sending request to /ajax/favorites/toggle');
const response = await fetch('/ajax/favorites/toggle', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'X-CSRF-Token': csrfToken
},
body: `service_id=${serviceId}`
});
console.log('Response status:', response.status);
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.status}`);
}
const data = await response.json();
console.log('Response data:', data);
const isFavoritesPage = window.location.pathname === '/manage-favorites';
if (isFavoritesPage && !data.isFavorited) {
handleFavoriteRemoval(this);
} else {
updateHeartIcon(heartIcon, data.isFavorited);
}
} catch (error) {
console.error('Error:', error);
alert('Failed to update favorite status. Please try again.');
}
}
function handleFavoriteRemoval(button) {
const card = button.closest('.col-md-4');
if (!card) return;
card.style.opacity = '0';
card.style.transition = 'opacity 0.3s ease';
setTimeout(() => {
card.remove();
const remainingCards = document.querySelectorAll('.row.g-4 > .col-md-4').length;
if (remainingCards === 0) {
location.reload();
}
}, 300);
}
function updateHeartIcon(icon, isFavorited) {
console.log('Updating heart icon:', { isFavorited });
if (isFavorited) {
icon.classList.remove('bi-heart');
icon.classList.add('bi-heart-fill');
} else {
icon.classList.remove('bi-heart-fill');
icon.classList.add('bi-heart');
}
}
// Search functionality
function initializeSearch() {
// Initialize header search
const headerForm = document.getElementById('headerSearchForm');
const headerSearchButton = document.getElementById('headerSearchButton');
if (headerForm) {
// Handle form submission (Enter key)
headerForm.addEventListener('submit', (e) => {
e.preventDefault();
const formData = new FormData(headerForm);
const params = new URLSearchParams(formData);
window.location.href = `/services/search?${params.toString()}`;
});
// Handle search button click
headerSearchButton?.addEventListener('click', (e) => {
e.preventDefault();
const formData = new FormData(headerForm);
const params = new URLSearchParams(formData);
window.location.href = `/services/search?${params.toString()}`;
});
// Handle category change
const headerCategoryFilter = document.getElementById('headerCategoryFilter');
if (headerCategoryFilter) {
headerCategoryFilter.addEventListener('change', () => {
const formData = new FormData(headerForm);
const params = new URLSearchParams(formData);
window.location.href = `/services/search?${params.toString()}`;
});
}
}
}
// Session timeout functionality - only included for logged-in users
});
</script>
</body>
</html>
{
"status": 200,
"statusText": "",
"headers": {
"alt-svc": "h3=\":443\"; ma=86400",
"cache-control": "no-store, no-cache, must-revalidate",
"cf-cache-status": "DYNAMIC",
"cf-ray": "90e712035ed38205-IAD",
"connection": "keep-alive",
"content-encoding": "br",
"content-type": "text/html; charset=UTF-8",
"date": "Fri, 07 Feb 2025 23:13:25 GMT",
"expires": "Thu, 19 Nov 1981 08:52:00 GMT",
"nel": "{\"success_fraction\":0,\"report_to\":\"cf-nel\",\"max_age\":604800}",
"pragma": "no-cache",
"report-to": "{\"endpoints\":[{\"url\":\"https:\\/\\/a.nel.cloudflare.com\\/report\\/v4?s=4og22T4lUiZfw25QrKd609Jo2j4W1wX%2FqI97M3k8XP5P1tUQCxuXc8EUZWqZ6GKd%2FW9fliYa9dI7avf0qWlV2eNkaZVL%2BlyDqgeFCx%2BpUoVxuOTf3Fsk%2BZ0OVIxU7WJGYqaXTArSPM8SWPoD\"}],\"group\":\"cf-nel\",\"max_age\":604800}",
"server": "cloudflare",
"server-timing": "cfL4;desc=\"?proto=TCP&rtt=678&min_rtt=633&rtt_var=270&sent=5&recv=6&lost=0&retrans=0&sent_bytes=3193&recv_bytes=816&delivery_rate=6388625&cwnd=252&unsent_bytes=0&cid=742a3ef1db2f4fdc&ts=102&x=0\"",
"transfer-encoding": "chunked",
"vary": "Accept-Encoding",
"set-cookie": "PHPSESSID=qmsqt4g0aqrg8k8o21p002ncjq; expires=Sat, 08 Feb 2025 04:13:25 GMT; Max-Age=18000; path=/; secure; HttpOnly; SameSite=Lax"
}
}
[
{
"url": "https://frankwork.com",
"errors": [
"Website took too long to respond: https://frankwork.com (26s)"
]
}
]
{
"error": false,
"result": {
"success": true,
"ogTitle": "frankwork.net",
"ogLocale": "en",
"favicon": "/favicon.ico",
"charset": "UTF-8",
"requestUrl": "https://frankwork.com"
},
"response": {}
}
{
"data": {
"total": 0,
"personal_emails": 0,
"generic_emails": 0,
"department": {
"executive": 0,
"it": 0,
"finance": 0,
"management": 0,
"sales": 0,
"legal": 0,
"support": 0,
"hr": 0,
"marketing": 0,
"communication": 0,
"education": 0,
"design": 0,
"health": 0,
"operations": 0
},
"seniority": {
"junior": 0,
"senior": 0,
"executive": 0
}
},
"meta": {
"params": {
"domain": "frankwork.com",
"company": null,
"type": null
}
}
}
{
"Afternic": "Buy domains, sell domains, and park domains.",
"Amazon": "This site is hosted on Amazon AWS EC2 Infrastructure.",
"AWS Global Accelerator": "Networking service that sends traffic through Amazon Web Service’s global network infrastructure for performance improvements.",
"Domain Not Resolving": "This domain or subdomain is not resolving to an IP.",
"Cloudflare Hosting": "Supercharged web hosting service.",
"SPF": "The Sender Policy Framework is an open standard specifying a technical method to prevent sender address forgery.",
"DMARC": "A technical specification created by a group of organizations that want to help reduce the potential for email-based abuse",
"DMARC Reject": "The domain has a DMARC policy of 'Reject'. This policy tells the mail server to reject emails that fail DMARC checks, preventing them from being delivered at all.",
"Namefind": "Bulk domain owner specializing in premium domain names.",
"Cloudflare DNS": "DNS services provided by Cloudflare.",
"IPv6": "The website has an IPv6 record."
}
{
"whois.verisign-grs.com": {
"Domain Status": [
"clientTransferProhibited https://icann.org/epp#clientTransferProhibited"
],
"Name Server": [
"CORY.NS.CLOUDFLARE.COM",
"TARA.NS.CLOUDFLARE.COM"
],
"Domain Name": "FRANKWORK.COM",
"Registry Domain ID": "2946408907_DOMAIN_COM-VRSN",
"Registrar WHOIS Server": "whois.cloudflare.com",
"Registrar URL": "http://www.cloudflare.com",
"Updated Date": "2024-12-30T15:25:39Z",
"Created Date": "2024-12-30T15:25:35Z",
"Expiry Date": "2025-12-30T15:25:35Z",
"Registrar": "Cloudflare, Inc.",
"Registrar IANA ID": "1910",
"Registrar Abuse Contact Email": "[email protected]",
"Registrar Abuse Contact Phone": "+1.6503198930",
"DNSSEC": "unsigned",
"URL of the ICANN Whois Inaccuracy Complaint Form": "https://www.icann.org/wicf/",
">>> Last update of whois database": "2025-02-07T23:13:13Z <<<",
"text": [
"For more information on Whois status codes, please visit https://icann.org/epp",
"",
"NOTICE: The expiration date displayed in this record is the date the",
"registrar's sponsorship of the domain name registration in the registry is",
"currently set to expire. This date does not necessarily reflect the expiration",
"date of the domain name registrant's agreement with the sponsoring",
"registrar. Users may consult the sponsoring registrar's Whois database to",
"view the registrar's reported date of expiration for this registration.",
"",
"TERMS OF USE: You are not authorized to access or query our Whois",
"database through the use of electronic processes that are high-volume and",
"automated except as reasonably necessary to register domain names or",
"modify existing registrations; the Data in VeriSign Global Registry",
"Services' (\"VeriSign\") Whois database is provided by VeriSign for",
"information purposes only, and to assist persons in obtaining information",
"about or related to a domain name registration record. VeriSign does not",
"guarantee its accuracy. By submitting a Whois query, you agree to abide",
"by the following terms of use: You agree that you may use this Data only",
"for lawful purposes and that under no circumstances will you use this Data",
"to: (1) allow, enable, or otherwise support the transmission of mass",
"unsolicited, commercial advertising or solicitations via e-mail, telephone,",
"or facsimile; or (2) enable high volume, automated, electronic processes",
"that apply to VeriSign (or its computer systems). The compilation,",
"repackaging, dissemination or other use of this Data is expressly",
"prohibited without the prior written consent of VeriSign. You agree not to",
"use electronic processes that are automated and high-volume to access or",
"query the Whois database except as reasonably necessary to register",
"domain names or modify existing registrations. VeriSign reserves the right",
"to restrict your access to the Whois database in its sole discretion to ensure",
"operational stability. VeriSign may restrict or terminate your access to the",
"Whois database for failure to abide by these terms of use. VeriSign",
"reserves the right to modify these terms at any time.",
"",
"The Registry database contains ONLY .COM, .NET, .EDU domains and",
"Registrars."
]
},
"whois.cloudflare.com": {
"Domain Status": [
"clienttransferprohibited https://icann.org/epp#clienttransferprohibited"
],
"Name Server": [
"cory.ns.cloudflare.com",
"tara.ns.cloudflare.com"
],
"Domain Name": "FRANKWORK.COM",
"Registry Domain ID": "2946408907_DOMAIN_COM-VRSN",
"Registrar WHOIS Server": "whois.cloudflare.com",
"Registrar URL": "https://www.cloudflare.com",
"Updated Date": "2025-01-06T08:01:47Z",
"Created Date": "2024-12-30T15:25:35Z",
"Expiry Date": "2025-12-30T15:25:35Z",
"Registrar": "Cloudflare, Inc.",
"Registrar IANA ID": "1910",
"Registry Registrant ID": "",
"Registrant Name": "",
"Registrant Organization": "",
"Registrant Street": "",
"Registrant City": "",
"Registrant State/Province": "ON",
"Registrant Postal Code": "",
"Registrant Country": "CA",
"Registrant Phone": "",
"Registrant Phone Ext": "",
"Registrant Fax": "",
"Registrant Fax Ext": "",
"Registrant Email": "https://domaincontact.cloudflareregistrar.com/frankwork.com",
"Registry Admin ID": "",
"Admin Name": "",
"Admin Organization": "",
"Admin Street": "",
"Admin City": "",
"Admin State/Province": "",
"Admin Postal Code": "",
"Admin Country": "",
"Admin Phone": "",
"Admin Phone Ext": "",
"Admin Fax": "",
"Admin Fax Ext": "",
"Admin Email": "https://domaincontact.cloudflareregistrar.com/frankwork.com",
"Registry Tech ID": "",
"Tech Name": "",
"Tech Organization": "",
"Tech Street": "",
"Tech City": "",
"Tech State/Province": "",
"Tech Postal Code": "",
"Tech Country": "",
"Tech Phone": "",
"Tech Phone Ext": "",
"Tech Fax": "",
"Tech Fax Ext": "",
"Tech Email": "https://domaincontact.cloudflareregistrar.com/frankwork.com",
"Registry Billing ID": "",
"Billing Name": "",
"Billing Organization": "",
"Billing Street": "",
"Billing City": "",
"Billing State/Province": "",
"Billing Postal Code": "",
"Billing Country": "",
"Billing Phone": "",
"Billing Phone Ext": "",
"Billing Fax": "",
"Billing Fax Ext": "",
"Billing Email": "https://domaincontact.cloudflareregistrar.com/frankwork.com",
"DNSSEC": "unsigned",
"Registrar Abuse Contact Email": "[email protected]",
"Registrar Abuse Contact Phone": "+1.4153197517",
"URL of the ICANN WHOIS Data Problem Reporting System": "http://wdprs.internic.net/",
">>> Last update of WHOIS database": "2025-02-07T23:13:25Z <<<",
"text": [
"For more information on Whois status codes, please visit https://icann.org/epp",
"",
"Cloudflare provides more than 13 million domains with the tools to give their global users a faster, more secure, and more reliable internet experience.",
"",
"NOTICE:",
"",
"Data in the Cloudflare Registrar WHOIS database is provided to you by Cloudflare",
"under the terms and conditions at https://www.cloudflare.com/domain-registration-agreement/",
"",
"By submitting this query, you agree to abide by these terms.",
"",
"Register your domain name at https://www.cloudflare.com/registrar/"
]
}
}