This commit is contained in:
edsea
2024-12-25 17:05:50 +01:00
commit 1f76a04566
43 changed files with 2542 additions and 0 deletions

6
.htaccess Normal file
View File

@@ -0,0 +1,6 @@
RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php[\s?/] [NC]
RewriteRule ^index\.php$ / [R=301,L]
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^([^/]+)/?$ $1.php [L]

157
about.php Normal file
View File

@@ -0,0 +1,157 @@
<?php
/**
* Page details
*/
$page_title = 'About: Revolutionizing Online Dating Experiences';
$page_description = "Learn about Stella Amor's mission to redefine online dating. We combine advanced search features with affordability to help you find meaningful connections.";
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/includes/header.php');
?>
<div class="container mt-10">
<div class="row">
<div class="col-md-6 col-s-12 align-self-center">
<h1>About Stella Amor</h1>
<p>
Stella Amor is a dating platform which let's the most picky user search for their desired partner. Our filter is among the biggest in the entire internet and let's you filter by financial statuses, body features, dreams and much much more.
<br><br>
Our goal is to let everyone go beyond the other platforms limits and allow users to filter by, what other platforms classes as "taboo". Want to find someone with a special fetish? We got it. Virgins? Got that too. If no one else has it, our goal is to either have it or implement it.
</p>
</div>
<div class="col-md-6">
<div class="image-container">
<img src="/rss/img/logo.png" class="shadow">
</div>
</div>
</div>
</div>
<div class="blue-banner">
<div class="container mt-10 p-20 text-center">
<h1>Free dating first month</h1>
<p>We know our service is that good that we're giving away 30 days free use. After that. It's only about $4.99 per month. If you're not happy with our service, just don't pay. But we know you'll be delighted regarding the best filter for dating sites.</p>
</div>
</div>
<div class="container mt-10">
<div class="row">
<div class="col-md-6 col-s-12 align-self-center">
<h1>Contact details</h1>
<p>
We're currently setting up a ticket system which will manage everything from investor relations to issue with accounts. While this is in development, feel free to reach out to us using the information below:<br>
Support: <a href="mailto:support@stellaamor.com">support@stellaamor.com</a><br>
Contact: <a href="mailto:info@stellaamor.com">info@stellaamor.com</a><br>
</p>
</div>
</div>
</div>
<div class="container mt-10" id="tos">
<div class="row">
<div class="col-md-6 col-s-12 align-self-center">
<h1>Terms of use</h1>
<p>
The following article lists our Terms of use. Please read carefuly and be aware that this may change from time to time.
</p>
<h2>1. User Conduct</h2>
<ul>
<li>Respect other users at all times. Harassment, hate speech, and abusive behavior are strictly prohibited.</li>
<li>Do not impersonate another person or create fake profiles to mislead others.</li>
<li>Sharing private or sensitive information of other users outside of the platform is strictly forbidden.</li>
<li>Spamming, phishing, or any malicious activity will result in account suspension or termination.</li>
</ul>
<h2>2. Profile Usage</h2>
<ul>
<li>You are responsible for keeping your account credentials secure.</li>
<li>Any content you upload must not violate copyright, trademark, or privacy laws.</li>
</ul>
<h2>3. Privacy and Data Usage</h2>
<ul>
<li>We prioritize user privacy and will not share your personal data without consent, except as required by law.</li>
<li>By using the platform, you agree to our data collection and usage practices as outlined in our Privacy Policy.</li>
</ul>
<h2>4. Reporting Issues</h2>
<ul>
<li>Any security vulnerabilities or bugs must be reported immediately to our support team and not exploited.</li>
<li>If you encounter inappropriate behavior or content, report it through the provided tools or contact support.</li>
</ul>
<h2>5. Liability</h2>
<ul>
<li>We are not responsible for the actions of users outside the platform.</li>
<li>Use the platform at your own risk. We do not guarantee outcomes such as successful matches or relationships.</li>
</ul>
<h2>6. Account Termination</h2>
<ul>
<li>We reserve the right to terminate accounts that violate these terms or engage in prohibited conduct.</li>
<li>Users may terminate their accounts at any time through account settings.</li>
</ul>
<h2>7. Amendments</h2>
<ul>
<li>We may update these Terms of Use from time to time. Continued use of the platform signifies acceptance of any changes.</li>
<li>We offer no refunds. You have 30 days to try our service. Consider that your trial period.</li>
<li>We do not offer refunds due to terminating accounts.</li>
</ul>
<h1>Privacy Policy</h1>
<p>Your privacy is important to us. This Privacy Policy explains how we collect, use, and protect your personal information when you use Stella Amor.</p>
<h2>1. Information We Collect</h2>
<ul>
<li><strong>Personal Information:</strong> When you create an account, we may collect information such as your name, email address, date of birth, and profile details.</li>
<li><strong>Usage Data:</strong> We collect data about your interactions with the platform, including search queries, messages, and matches.</li>
<li><strong>Device Information:</strong> Information about your device, such as IP address, browser type, and operating system, may also be collected.</li>
</ul>
<h2>2. How We Use Your Information</h2>
<ul>
<li>To provide and improve the platforms functionality and user experience.</li>
<li>To personalize your experience, including suggesting matches and content.</li>
<li>To communicate with you, including sending updates, notifications, and support messages.</li>
<li>To monitor and enhance security, including preventing fraud and abuse.</li>
</ul>
<h2>3. Sharing Your Information</h2>
<ul>
<li>We do not sell your personal data to third parties.</li>
<li>Your information may be shared with trusted partners or service providers who help operate our platform, under strict confidentiality agreements.</li>
<li>We may disclose information as required by law or to protect the rights and safety of our users or platform.</li>
</ul>
<h2>4. Data Retention</h2>
<ul>
<li>We retain your information for as long as your account is active or as necessary to provide our services.</li>
<li>Data may be retained to comply with legal obligations, resolve disputes, and enforce agreements.</li>
</ul>
<h2>5. Your Rights</h2>
<ul>
<li>You can opt out of marketing communications by adjusting your preferences in your account.</li>
<li>If you have concerns about how your data is being used, contact our support team at support@stellaamor.com</li>
</ul>
<h2>6. Security</h2>
<ul>
<li>We use industry-standard security measures to protect your data from unauthorized access and breaches.</li>
<li>However, no online service can guarantee absolute security. Use the platform at your own risk.</li>
</ul>
<h2>7. Changes to This Privacy Policy</h2>
<ul>
<li>We may update this Privacy Policy from time to time. Significant changes will be communicated to users through the platform or email.</li>
<li>Continued use of the platform indicates acceptance of any updates.</li>
</ul>
</div>
</div>
</div>
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/rss/php/includes/footer.php');
?>

12
home/.htaccess Normal file
View File

@@ -0,0 +1,12 @@
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
RewriteRule ^index\.html$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.html [L]
</IfModule>

View File

@@ -0,0 +1 @@
@import url(https://fonts.googleapis.com/css2?family=Niconne&family=Poly:ital@0;1&family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap);#app{font-family:Poppins,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-align:center;color:#353535}nav{padding:30px}nav a{font-weight:700;color:#fff}nav a.router-link-exact-active{color:#42b983}.font-niconne{font-family:Niconne,cursive;font-family:Poly,serif}.poppins,body{font-family:Poppins,sans-serif}img{max-width:100%}.main{padding-top:60px}@media(min-width:960px){.main{padding-top:70px}}*{text-align:left}.app-main{margin-top:60px;position:relative;min-height:calc(100vh - 60px)}.top-bar{z-index:10;position:fixed}.loadingScreen{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#ffffffc9;display:flex;justify-content:center;align-items:center;z-index:9}.resetRow{justify-content:flex-end;padding:8px}.filterDrawer{background-color:#fff;z-index:9;height:calc(100% - 60px);padding-top:50px}.filter-header{font-size:18px;font-weight:300;padding-left:5px;padding-bottom:5px;padding-top:20px}.filter-label{font-size:12px;padding-left:15px;margin-bottom:10px;margin-top:10px;display:block}.filter-span{color:#747474;display:block;text-wrap:wrap}.filter-titles{font-size:14px;color:#6d6b6b;font-weight:400;padding-bottom:5px}.list-actions{position:fixed;height:60px;bottom:0;width:100%;padding:0 15px;background:#fff}.filter{padding-bottom:70px}.v-input--selection-controls .v-input__slot>.v-label{font-size:12px}.v-list--dense .v-l,.v-list-item--dense{min-height:30px}.user-age{padding-left:5px;font-size:14px;color:#999}.user-info{color:#666}.user-info ul{list-style:none;padding:0;margin:0}.banner{background-size:cover;background-position:50%;height:350px;background-color:#f7f7f7}.profile-card{margin-top:-100px}.user-info{text-align:center;padding:20px}.user-info h2{margin-bottom:10px}.user-info p{margin:0}.lightbox-arrow{position:absolute;top:50%;width:36px!important;height:36px!important;transform:translateY(-50%);color:#fff!important;background-color:rgba(0,0,0,.5)!important;border-radius:50%!important;box-shadow:0 2px 4px rgba(0,0,0,.3)!important;min-width:unset!important}.lightbox-arrow.left{left:10px}.lightbox-arrow.right{right:10px}.removeImage{top:3px;right:3px;width:18px!important;height:18px!important}.removeImage,.removeImage2{position:absolute;padding:5px!important;color:#e5e5e5!important;background-color:rgba(0,0,0,.5)!important;border-radius:50%!important;box-shadow:0 2px 4px rgba(0,0,0,.3)!important;min-width:unset!important}.removeImage2{top:10px;right:10px;width:30px!important;height:30px!important}.unreadMessages{color:#1976d2!important}.equal-height-row{display:flex;flex-wrap:wrap}.equal-height-card{flex:1 0 auto;display:flex;flex-direction:column}.userInfoListClass{list-style-type:none;padding:0;margin:0;display:flex;flex-wrap:wrap}.userInfoListClass li{width:calc(50% - 20px);margin:10px;padding:15px;border-radius:10px;box-shadow:0 4px 6px rgba(0,0,0,.1);background-color:#fff;transition:background-color .3s ease}.userInfoListClass li:hover{background-color:#f0f0f0}.userInfoListClass li h4{margin-top:0;margin-bottom:10px;font-size:14px;font-weight:400;color:#979797}.userInfoListClass li p{margin-bottom:5px;font-size:12px;color:#919191;line-height:1.4}@media(max-width:768px){.userInfoListClass li{width:calc(100% - 20px)}}.fixedToolbar[data-v-4464b245]{position:fixed;top:0;width:100%}.chat-messages[data-v-4464b245]{padding-top:65px;overflow-y:auto;display:flex;flex-direction:column;height:100%}.chat-message[data-v-4464b245]{margin:10px;padding:10px;border-radius:10px;width:80%}.message-header[data-v-4464b245]{display:flex;align-items:center}.avatar[data-v-4464b245]{width:40px;height:40px;border-radius:50%;margin-right:10px}.username[data-v-4464b245]{font-weight:700;margin-right:10px;cursor:pointer}.message-content[data-v-4464b245]{word-wrap:break-word}.outgoing[data-v-4464b245]{align-self:flex-end;background-color:#2196f3;color:#fff}.incoming[data-v-4464b245]{align-self:flex-start;background-color:#f5f5f5}.sendButton[data-v-4464b245]{display:flex;align-items:center;justify-content:flex-end}.chat-container[data-v-4464b245]{display:flex;flex-direction:column;min-height:100%;justify-content:space-between}.conversation-row[data-v-4464b245]{background-color:#6492f938;padding:10px;margin-bottom:20px;border-radius:12px;cursor:pointer}.conversationTime[data-v-4464b245]{font-size:12px;color:#a3a3a3;right:5px;position:absolute}.conversationUsername[data-v-4464b245]{display:inline;font-weight:500;padding-bottom:5px}.conversation-box[data-v-4464b245]{position:relative}

File diff suppressed because one or more lines are too long

BIN
home/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
home/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
home/img/logo2.9f656f3d.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

5
home/index.html Normal file
View File

@@ -0,0 +1,5 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/x-icon" href="favicon.ico"><title>Stella Amor | Discover Your Dream Date Today</title><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous"/><link rel="canonical" href="https://stellaamor.com"><link rel="icon" type="image/x-icon" href="favicon.ico"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:title" content="Stella Amor | Discover Your Dream Date Today"><meta property="og:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:image" content="https://api.stellaamor.com/static/logo2.png"><meta property="og:url" content="https://stellaamor.com"><meta property="og:type" content="website"><meta name="twitter:title" content="Stella Amor | Discover Your Dream Date Today"><meta name="twitter:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta name="twitter:image" content="https://api.stellaamor.com/static/logo2.png"><meta name="twitter:card" content="summary_large_image"><meta name="author" content="Stella Amor"><meta name="keywords" content="Dating"><meta name="robots" content="index,follow"><meta httpequiv="expires" content="0"><meta httpequiv="pragma" content="no-cache"><script defer="defer" src="/home/js/chunk-vendors.644485be.js"></script><script defer="defer" src="/home/js/app.eb118890.js"></script><link href="/home/css/chunk-vendors.0ee1ee54.css" rel="stylesheet"><link href="/home/css/app.5360f6f2.css" rel="stylesheet"></head><script async src="https://www.googletagmanager.com/gtag/js?id=G-486MZV8H9M"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-486MZV8H9M');</script><body><noscript><strong>We're sorry but app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

5
home/index.html.bck Normal file
View File

@@ -0,0 +1,5 @@
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" type="image/x-icon" href="favicon.ico"><title>Stella Amor | Discover Your Dream Date Today</title><link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css" crossorigin="anonymous"/><link rel="canonical" href="https://stellaamor.com"><link rel="icon" type="image/x-icon" href="favicon.ico"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><meta name="description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:title" content="Stella Amor | Discover Your Dream Date Today"><meta property="og:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta property="og:image" content="https://api.stellaamor.com/static/logo2.png"><meta property="og:url" content="https://stellaamor.com"><meta property="og:type" content="website"><meta name="twitter:title" content="Stella Amor | Discover Your Dream Date Today"><meta name="twitter:description" content="Discover endless possibilities for meaningful connections at Stella Amor, the innovative dating platform designed to cater to every preference. With our comprehensive filtering system, finding your perfect match has never been easier. Explore a diverse community and unlock your path to love and companionship today"><meta name="twitter:image" content="https://api.stellaamor.com/static/logo2.png"><meta name="twitter:card" content="summary_large_image"><meta name="author" content="Stella Amor"><meta name="keywords" content="Dating"><meta name="robots" content="index,follow"><meta httpequiv="expires" content="0"><meta httpequiv="pragma" content="no-cache"><script defer="defer" src="/js/chunk-vendors.644485be.js"></script><script defer="defer" src="/js/app.eb118890.js"></script><link href="/css/chunk-vendors.0ee1ee54.css" rel="stylesheet"><link href="/css/app.5360f6f2.css" rel="stylesheet"></head><script async src="https://www.googletagmanager.com/gtag/js?id=G-486MZV8H9M"></script><script>window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'G-486MZV8H9M');</script><body><noscript><strong>We're sorry but app doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>

2
home/js/app.eb118890.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

BIN
home/rss/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

147
index.php Normal file
View File

@@ -0,0 +1,147 @@
<?php
/**
* Page details
*/
$page_title = 'Exclusive Online Dating Platform with Advanced Match Filters';
$page_description = 'Join Stella Amor to experience the largest dating filters online. Enjoy personalized matchmaking with free first-month access. Start finding meaningful connections today!';
include($_SERVER['DOCUMENT_ROOT'] . '/rss/php/includes/header.php');
?>
<section class="landing-banner">
<div class="overlay">
<div class="container">
<div class="row">
<div class="col-md-6 col-12">
<h1>Explore the Future of Online Dating with StellaAmor</h1>
<p>Join StellaAmor for free and discover meaningful connections with our advanced match filters.
Love is just a click away!</p>
</div>
<div class="col-md-6 col-12">
<div class="home-container">
<h2>Sign Up</h2>
<form action="#" method="POST" id="signup">
<div class="form-field">
<label for="username">Username:</label>
<input type="text" id="username" placeholder="Username" required>
<div class="errors" id="usernameError"></div>
</div>
<div class="form-row">
<div class="form-field">
<label for="email">Email:</label>
<input type="email" id="email" placeholder="Enter your email" required>
<div class="errors" id="emailError"></div>
</div>
<div class="form-field">
<label for="u_dob">Date of birth:</label>
<input type="date" id="u_dob" required>
<div class="errors" id="dobError"></div>
</div>
</div>
<div class="form-row">
<div class="gender-select form-field">
<label for="gender">Gender:</label>
<select id="gender" required>
<option value="" disabled selected>Select your gender</option>
<option value="male">Male</option>
<option value="female">Female</option>
<option value="other">Other</option>
</select>
<div class="errors" id="genderError"></div>
</div>
<div class="country-select form-field">
<label for="userCountry">Country:</label>
<select id="userCountry" required>
<option value="" disabled selected>Select your country</option>
</select>
<div class="errors" id="countryError"></div>
</div>
</div>
<div class="form-field">
<label for="password">Password:</label>
<input type="password" id="password" placeholder="Password" required>
<div class="errors" id="passwordError"></div>
</div>
<div class="form-field">
<label for="password2">Confirm Password:</label>
<input type="password" id="password2" placeholder="Confirm Password" required>
<div class="errors" id="password2Error"></div>
</div>
<div class="checkbox-container">
<label>
<input type="checkbox" required> I am over 18 years old
</label>
<label>
<input type="checkbox" required id="tos"> I accept the <a class="link" target="_blank" href="/about#tos">terms of use</a>
</label>
<div class="errors" id=""></div>
</div>
<button type="submit">Sign up</button>
<i class="mdi mdi-loading" id="spinner"></i>
</form>
<div class="error" id="errors"></div>
</div>
</div>
</div>
</div>
</div>
</section>
<div class="container mt-10">
<div class="row">
<div class="col-md-6 col-s-12 align-self-center">
<h2>Online dating made exclusive</h2>
<p>We offer the widest search filter among all dating sites. To prove how good our platform is, we give each new member an entire month of free access. No binding periods and no credit card verifications.
Our dating platform is built for people to be able to find exactly what they are looking for. Wheter if it's body features, preferences or future dreams, we have exactly what you need to find what you're looking for.
</p>
</div>
<div class="col-md-6">
<div class="image-container">
<img alt="dating couple" src="/rss/img/couple.jpg" class="shadow">
</div>
</div>
</div>
</div>
<div class="blue-banner">
<div class="container mt-10">
<div class="row">
<div class="col-md-4 col-s-12">
<div class="image-container">
<img src="/rss/img/save.png" alt="cheap dating" class="shadow">
</div>
</div>
<div class="col-md-8 col-s-12 align-self-center">
<h2>Free access first month, then $9.99</h2>
<p>At Stella Amor, we want you to try out our dating platform for free, without worrying about spending. We have built the perfect platform for everyone. We will by that also aim to be the cheapest premium online dating site as well. After your first month, you'll only be paying approximately $9.99 per month, no binding periods.</p>
</div>
</div>
</div>
</div>
<div class="container mt-10">
<div class="row">
<div class="col-md-8 col-s-12 align-self-center">
<h2>Why Stella Amor Stands Out</h2>
<p>Our goal is to provide you with the biggest filter you've ever seen. At Stella Amor's dating platform, you can filter by body features, finance, life goals, religion, sexual activity, pets, life situations and much much more.</p>
</div>
<div class="col-md-3 col-s-12">
<div class="image-container">
<img src="/rss/img/search.png" alt="dating filter">
</div>
</div>
</div>
</div>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/rss/php/includes/footer.php');?>

1127
rss/css/main.css Normal file

File diff suppressed because it is too large Load Diff

1
rss/css/main.css.map Normal file

File diff suppressed because one or more lines are too long

657
rss/css/main.scss Normal file
View File

@@ -0,0 +1,657 @@
@import url('https://fonts.googleapis.com/css2?family=Arima:wght@100..700&display=swap');
*,
*::before,
*::after {
box-sizing: border-box;
font-family: "Arima", system-ui;
}
body {
margin: 0;
padding: 0;
}
$gutter-width: 30px;
$breakpoints: (
"s": 320px,
"sm": 576px,
"md": 768px,
"lg": 992px,
"xl": 1200px,
"xxl": 1400px
);
// Define max-width for each breakpoint
$max-widths: (
"sm": 540px, // Set a specific max-width for small screens
"md": 720px, // Set a specific max-width for medium screens
"lg": 960px, // Set a specific max-width for large screens
"xl": 1140px, // Existing value for extra large screens
"xxl": 1320px // Existing value for extra large screens
);
.container {
width: 100%;
padding-right: $gutter-width / 2;
padding-left: $gutter-width / 2;
margin-right: auto;
margin-left: auto;
@each $breakpoint, $value in $breakpoints {
@media (min-width: #{$value}) {
max-width: map-get($max-widths, $breakpoint); // Use the defined max-widths
}
}
}
/**
Margins
**/
.mt-10{
margin-top:100px;
}
// Padding
.p-0{
padding: 0;
}
.p-20{
padding:20px;
}
// Text
.text-center{
text-align: center;
}
.row {
display: flex;
flex-wrap: wrap;
margin-right: -$gutter-width / 2;
margin-left: -$gutter-width / 2;
}
// Default column classes (no media queries)
@for $i from 1 through 12 {
.col-#{$i} {
flex: 0 0 #{(100% / 12) * $i};
max-width: #{(100% / 12) * $i};
padding-right: $gutter-width / 2;
padding-left: $gutter-width / 2;
}
}
.col-auto {
flex: 0 0 auto;
width: auto;
}
// Media queries for specific breakpoints
@each $breakpoint, $value in $breakpoints {
@media (min-width: #{$value}) {
.col-#{$breakpoint}-auto {
flex: 0 0 auto;
width: auto;
}
@for $i from 1 through 12 {
.col-#{$breakpoint}-#{$i} {
flex: 0 0 #{(100% / 12) * $i};
max-width: #{(100% / 12) * $i};
padding-right: $gutter-width / 2;
padding-left: $gutter-width / 2;
}
}
}
}
.blue-banner{
background-color: #5a7489;
color: #fff;
}
.col {
flex: 1;
padding-right: $gutter-width / 2;
padding-left: $gutter-width / 2;
}
.justify-content-center{
justify-content: center;
}
.align-items-center{
align-items: center;
}
.align-self-center{
align-self: center;
}
.d-flex{
display:flex;
}
.h-auto{
height:auto !important;
min-height: auto !important;
max-height: auto !important;
}
.image-container{
width: 100%;
position: relative;
@media(max-width:768px){
padding:10px;
}
img{
width: 100%;
border-radius: 12px;
.shadow{
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
}
}
// Menu
.navbar {
background-color: #fff;
padding: 5px 10px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
position: relative;
z-index: 10;
.container {
display: flex;
justify-content: space-between;
align-items: center;
margin: 0 auto;
}
.logo {
img {
width: 125px;
}
}
.nav-links {
list-style: none;
display: flex;
gap: 1.5rem;
li {
a {
text-decoration: none;
color: #333;
font-size: 1rem;
font-weight: 500;
padding: 0.3rem 0.8rem;
border-radius: 4px;
transition: background-color 0.3s ease, color 0.3s ease;
&:hover {
background-color: #f0f0f0;
color: #6d6d6d;
}
}
}
}
.burger {
display: none;
cursor: pointer;
flex-direction: column;
gap: 0.3rem;
span {
width: 28px;
height: 2px;
background-color: #333;
border-radius: 2px;
transition: transform 0.3s ease, opacity 0.3s ease;
}
}
@media screen and (max-width: 768px) {
.nav-links {
display: none;
flex-direction: column;
position: absolute;
top: 100%;
right: 0;
background-color: #fff;
width: 100%;
padding: 0rem 0.5rem;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
opacity: 0;
transform: translateY(-10px);
transition: opacity 0.3s ease, transform 0.3s ease;
border-radius: 0px 0px 8px 8px;
margin: 0;
gap: 15px;
padding: 10px 0px;
li {
// margin-bottom: 0.1rem;
text-align: left;
a {
font-size: 1.1rem;
font-weight: 500;
color: #333;
// padding: 0.8rem;
text-align: center;
border-radius: 4px;
display: block;
margin: 0;
padding:0;
text-align: left;
padding: 0px 20px;
&:hover {
background-color: #f0f0f0;
}
}
}
&.nav-active {
display: flex;
opacity: 1;
transform: translateY(0);
}
}
.burger {
display: flex;
&.toggle span:nth-child(1) {
transform: rotate(-45deg) translate(-5px, 6px);
}
&.toggle span:nth-child(2) {
opacity: 0;
}
&.toggle span:nth-child(3) {
transform: rotate(45deg) translate(-5px, -6px);
}
}
}
}
// Home banner
.landing-banner {
background: url('/rss/img/people.jpg') no-repeat center center/cover;
background-attachment: fixed;
min-height: 100vh;
position: relative;
color: #fff;
.overlay {
background-color: rgba(0, 0, 0, 0.5);
height: 100%;
display: flex;
align-items: flex-start;
justify-content: center;
text-align: center;
padding: 1.5rem;
position: absolute;
top:0;
left: 0;
width: 100%;
min-height:100vh;
@media(max-width: 768px){
padding-bottom:150px;
}
@media(max-width:768px){
height:unset;
position: relative;
}
@media(max-width:768px) {
padding: 0.5rem;
}
&.login{
padding-top:100px;
@media(max-width:768px){
padding: 0;
}
}
.container {
@media(max-width:768px) {
max-width: unset;
}
h1 {
font-size: 2.5rem;
margin-bottom: 0.5rem;
line-height: 1.2;
}
p {
font-size: 1.2rem;
margin-bottom: 2rem;
line-height: 1.5;
}
.home-container {
background: #fff; // Added missing semicolon
padding: 2rem;
border-radius: 8px;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
h2 {
margin-bottom: 1rem;
font-size: 1.5rem; // Size for the signup heading
color: #333; // Dark text color for contrast
}
form {
display: flex;
flex-direction: column;
.form-field {
margin-bottom: 1rem; // Space between fields
display: flex;
flex-direction: column;
justify-content: flex-start;
text-align: left;
@media(max-width:768px) {
margin-bottom: 0.5rem;
}
label {
margin-bottom: 0.5rem; // Space between label and input/select
color: #333; // Dark text color for labels
}
input[type="text"],
input[type="date"],
input[type="email"],
input[type="password"],
select {
padding: 0.75rem;
border: 1px solid #ccc;
border-radius: 4px;
font-size: 1rem;
color: #333; // Dark text color for inputs/selects
background-color: #fff; // White background for inputs/selects
&:focus {
border-color: #007bff; // Focus effect
outline: none;
}
&.invalid{
border: 1px solid #ef3c3c
}
}
}
.form-row {
display: flex; // Display the selects in a row
justify-content: space-between; // Space between selects
margin-bottom: 1rem; // Space below the row
@media(max-width:768px) {
flex-direction: column;
}
.gender-select,
.country-select {
width: 48%; // Set width to 48% for two select elements side by side
@media(max-width:768px) {
width: 100%;
}
}
}
.checkbox-container {
display: flex;
flex-direction: column;
margin-bottom: 1rem;
label {
font-size: 0.9rem; // Slightly smaller font for checkboxes
display: flex;
align-items: center; // Align checkbox and text
color: #333; // Dark text color for checkbox labels
input[type="checkbox"] {
margin-right: 0.5rem; // Space between checkbox and label text
}
}
}
button {
padding: 0.75rem;
border: none;
border-radius: 4px;
background-color: #007bff; // Primary button color
color: #fff;
font-size: 1rem;
cursor: pointer;
transition: background-color 0.3s ease;
&:hover {
background-color: #0056b3; // Darker on hover
}
}
.link{
font-weight: bold;
color: inherit;
margin-left: 3px;
}
}
}
}
}
.errors{
background-color: rgba(239, 60, 60, 0.93);
border-radius: 4px;
color: #fff;
margin-top: 5px;
}
@media screen and (max-width: 768px) {
h1 {
font-size: 2rem;
}
p {
font-size: 1rem;
}
.home-container {
padding: 1.5rem;
h2 {
font-size: 1.3rem;
}
}
}
}
.login-page {
width: 100%;
min-height: 100vh;
display: flex;
justify-content: center;
align-items: center;
background-color: #E7E7E7;
.login {
width: 400px;
padding: 4rem 2rem;
background-color: #fff;
border-radius: 8px;
text-align: center;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1), 0 2px 4px rgba(0, 0, 0, 0.1), 0 12px 24px rgba(0, 0, 0, 0.2);
@media(max-width:768px){
width: calc(100% - 40px);
}
@media(min-width:769px){
margin-top: -125px;
}
.logo {
width: 84px;
margin-bottom: 1.5rem;
}
form {
display: flex;
flex-direction: column;
align-items: center;
.input {
width: 100%;
padding: 0.75rem;
margin: 0.5rem 0;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 1rem;
}
.login-button {
width: 100%;
padding: 0.75rem;
margin-top: 1rem;
background-color: #0073aa;
color: #fff;
border: none;
border-radius: 4px;
font-size: 1rem;
cursor: pointer;
transition: background-color 0.3s ease;
&:hover {
background-color: #006799;
}
}
}
.forgot-password {
display: block;
margin-top: 1rem;
font-size: 0.875rem;
color: #0073aa;
text-decoration: none;
transition: color 0.3s ease;
&:hover {
text-decoration: underline;
}
}
}
}
footer{
width: 100%;
background-color:#333;
display: flex;
justify-content: center;
margin-top: 45px;
.footer-inner{
width: 80%;
padding: 20px 40px;
display:flex;
flex-direction: row;
color:#fff;
margin: 0 -20px;
@media(max-width:768px){
padding: 5px;
flex-direction: column;
width: 100%;
}
.footer-col{
width: 20%;
max-width: 20%;
padding: 0 20px;
@media(max-width:768px){
width: 100%;
max-width: unset;
padding: 10px;
}
.image-container{
width: 180px;
}
&.img{
display: flex;
align-items: center;
justify-self: flex-end;
margin-left: auto;
@media(max-width: 768px){
justify-content: center;
}
}
}
}
}
.footer-menu{
.link-title{
margin:5px 0px;
padding:0;
line-height: 1;
}
ul{
list-style: none;
padding: 0;
margin: 0;
}
a{
color:inherit;
text-decoration: none;
}
}
.mdi{
color:#0056b3;
font-size: 1.8rem;
&.mdi-loading{
animation: rotate 1s linear infinite;
display: none;
&.show{
display:block
}
}
}
@keyframes rotate {
0% {
transform: rotate(0deg);
}
100% {
transform: rotate(360deg);
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
rss/favicon/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

3
rss/favicon/favicon.svg Normal file

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 49 KiB

View File

@@ -0,0 +1,21 @@
{
"name": "MyWebSite",
"short_name": "MySite",
"icons": [
{
"src": "/rss/favicon/web-app-manifest-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "maskable"
},
{
"src": "/rss/favicon/web-app-manifest-512x512.png",
"sizes": "512x512",
"type": "image/png",
"purpose": "maskable"
}
],
"theme_color": "#ffffff",
"background_color": "#ffffff",
"display": "standalone"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

BIN
rss/img/couple.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 350 KiB

BIN
rss/img/logo-light.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
rss/img/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

BIN
rss/img/logo_old.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 KiB

BIN
rss/img/people.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
rss/img/save.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

BIN
rss/img/search.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 111 KiB

BIN
rss/img/sunset.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 477 KiB

128
rss/js/home.js Normal file
View File

@@ -0,0 +1,128 @@
document.addEventListener('DOMContentLoaded', async (v) => {
let countries = await fetchCountries();
// Handlers
let countrySelector = document.getElementById('userCountry');
for(country of countries){
countrySelector.innerHTML += `<option value="${country.text}">${country.text}</option>`;
}
let signupForm = document.getElementById('signup');
signupForm.addEventListener('submit', (e) => {
e.preventDefault();
document.getElementById('spinner').classList.add('show');
// Extract form data
let username = signupForm.querySelector('#username').value;
let dob = signupForm.querySelector('#u_dob').value;
let country = signupForm.querySelector('#userCountry').value;
let gender = signupForm.querySelector('#gender').value;
let email = signupForm.querySelector('#email').value;
let password = signupForm.querySelector('#password').value;
let password2 = signupForm.querySelector('#password2').value;
let tosInput = signupForm.querySelector('#tos');
let tos = tosInput.checked;
// Remove errors
document.getElementById('usernameError').innerText = null;
document.getElementById('countryError').innerText = null;
document.getElementById('emailError').innerText = null;
document.getElementById('dobError').innerText = null;
document.getElementById('genderError').innerText = null;
document.getElementById('passwordError').innerText = null;
document.getElementById('password2Error').innerText = null;
let userData = {
username: username,
country: country,
gender: gender,
email: email,
dob: dob,
password: password,
password2: password2,
acceptTerms: tos
};
let action = 'signup';
let formData = JSON.stringify({
action: action,
userData: userData
});
// Send request
fetch('https://api.stellaamor.com/users.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: formData
})
.then(response => {
if(response && response.length){
return response.json();
}else{
return null;
}
})
.then(msg => {
console.log(msg);
// If we have a JSON response, process it; otherwise, assume success
document.getElementById('spinner').classList.remove('show');
if (msg && msg.status === 'fail') {
let errorArea = msg.fail_status;
if (errorArea === 'username') {
document.getElementById('usernameError').innerText = msg.message;
}
if (errorArea === 'country') {
document.getElementById('countryError').innerText = msg.message;
}
if (errorArea === 'email') {
document.getElementById('emailError').innerText = msg.message;
}
if (errorArea === 'dob') {
document.getElementById('dobError').innerText = msg.message;
}
if (errorArea === 'gender') {
document.getElementById('genderError').innerText = msg.message;
}
if (errorArea === 'password') {
document.getElementById('passwordError').innerText = msg.message;
}
if (errorArea === 'password2' || errorArea === 'passwords') {
document.getElementById('password2Error').innerText = msg.message;
}
} else {
// Success: Redirect to signin page
setTimeout(() => {
window.location.href = '/signin';
}, 2000);
}
})
.catch(error => {
console.error('Error during signup:', error);
document.getElementById('errors').innerText = 'An error occurred. Please try again later.';
});
});
// Call init functions
});
async function fetchCountries() {
try {
const response = await fetch('https://restcountries.com/v3.1/all?fields=name');
const data = await response.json();
const countries = data.map(country => ({
text: country.name.common,
val: country.cca2,
})).sort((a, b) => a.text.localeCompare(b.text));
return countries;
} catch (error) {
console.error('Error fetching countries:', error);
return [];
}
}

83
rss/js/login.js Normal file
View File

@@ -0,0 +1,83 @@
document.addEventListener('DOMContentLoaded', async (v) =>{
await isAuth();
let loginForm = document.getElementById('loginForm');
loginForm.addEventListener('submit', async (e) =>{
e.preventDefault();
login();
})
})
// Async login function in vanilla JS
async function login() {
// Set login running state
let loginRunning = true;
let loginError = false;
// Get form data
let username = document.getElementById('username').value;
let password = document.getElementById('password').value;
let postFields = {
userData: {
username: username,
password: password
},
action: 'login'
};
try {
// Send request
const response = await fetch('https://api.stellaamor.com/users.php', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
credentials: 'include', // To handle cookies
body: JSON.stringify(postFields)
});
const data = await response.json();
if (data.status === 'fail') {
// Display error if login fails
loginError = true;
document.getElementById('loginError').innerText = data.message;
loginRunning = false;
} else {
// Successful login, redirect to /home
loginRunning = false;
setTimeout(() => {
window.location.href = '/home';
// Reset form fields and errors after login
document.getElementById('username').value = '';
document.getElementById('password').value = '';
document.getElementById('loginError').innerText = '';
loginRunning = false;
}, 1500);
}
} catch (error) {
console.error('Login error:', error);
loginError = true;
loginRunning = false;
}
}
// Async authentication check function in vanilla JS
async function isAuth() {
try {
const response = await fetch('https://api.stellaamor.com/users.php?isAuth=true', {
method: 'GET',
credentials: 'include'
});
const data = await response.json();
if (data.status === true) {
window.location.href = '/home';
} else {
return false;
}
} catch (error) {
return false;
}
}

4
rss/js/main.js Normal file
View File

@@ -0,0 +1,4 @@
// Global functions
async function mainFetch(fdata){
}

7
rss/js/menu.js Normal file
View File

@@ -0,0 +1,7 @@
const burger = document.querySelector('.burger');
const navLinks = document.querySelector('.nav-links');
burger.addEventListener('click', () => {
navLinks.classList.toggle('nav-active');
burger.classList.toggle('toggle');
});

1
rss/json/countries.json Normal file

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,45 @@
<script src="/rss/js/menu.js"></script>
<?php
$pre_page = $_SERVER['PHP_SELF'];
$page = str_replace('/', '', $pre_page);
$page = str_replace('.php', '', $page);
if($page == 'index'){
echo '<script src="/rss/js/home.js"></script>';
}
if($page == 'signin'){
echo '<script src="/rss/js/login.js"></script>';
}
?>
<footer>
<div class="footer-inner">
<div class="footer-col">
<div class="footer-menu">
<h3 class="link-title">Links</h3>
<ul>
<li><a href="/">Home</li>
<li><a href="/signin">Sign in</a></li>
<li><a href="/about">About</a></li>
</ul>
</div>
</div>
<div class="footer-col">
<div class="footer-menu">
<h3 class="link-title">Contact</h3>
<ul>
<li>Support: <a href="mailto:support@stellaamor.com">support@stellaamor.com</li>
<li>Contact: <a href="mailto:info@stellaamor.com">info@stellaamor.com</a></li>
</ul>
</div>
</div>
<div class="footer-col img">
<div class="image-container">
<img src="/rss/img/logo-light.png">
</div>
</div>
</div>
</footer>
</body>
</html>

View File

@@ -0,0 +1,63 @@
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Basic Meta Tags -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Stella Amor | <?php echo $page_title;?></title>
<!-- Meta Description -->
<meta name="description" content="<?php echo $page_description;?> ">
<meta name="keywords" content="dating">
<!-- Open Graph Tags for Social Media -->
<meta property="og:title" content="Stella Amor | <?php echo $page_title;?>">
<meta property="og:description" content="<?php echo $page_description;?>">
<meta property="og:image" content="https://stellaamor.com/rss/img/logo.png">
<meta property="og:url" content="https://stellaamor.com<?php echo $_SERVER['REQUEST_URI'];?>">
<meta property="og:type" content="website">
<!-- Twitter Card Meta Tags -->
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Stella Amor | <?php echo $page_title;?>">
<meta name="twitter:description" content="<?php echo $page_description;?>">
<meta name="twitter:image" content="https://stellaamor.com/rss/img/logo.png">
<link rel="icon" type="image/png" href="/rss/favicon/favicon-96x96.png" sizes="96x96" />
<link rel="icon" type="image/svg+xml" href="/rss/favicon/favicon.svg" />
<link rel="shortcut icon" href="/rss/favicon/favicon.ico" />
<link rel="apple-touch-icon" sizes="180x180" href="/rss/favicon/apple-touch-icon.png" />
<link rel="manifest" href="/rss/favicon/site.webmanifest" />
<!-- Canonical Link (for duplicate pages) -->
<link rel="canonical" href="https://stellaamor.com<?php echo $_SERVER['REQUEST_URI'];?>">
<!-- Favicon -->
<link rel="icon" href="/favicon.ico" type="image/x-icon">
<!-- Robots Meta Tag (for search engine crawling control) -->
<meta name="robots" content="index, follow">
<!-- Include css and JS -->
<link href="https://cdn.jsdelivr.net/npm/@mdi/font/css/materialdesignicons.min.css" rel="stylesheet">
<link href="/rss/css/main.css" rel="stylesheet">
<body>
<!-- Begin menu -->
<nav class="navbar">
<div class="container">
<a href="/" class="logo"><img src="/rss/img/logo.png"></a>
<ul class="nav-links">
<li><a href="/">Home</a></li>
<li><a href="signin">Login</a></li>
<li><a href="/about">About us</a></li>
</ul>
<div class="burger">
<span></span>
<span></span>
<span></span>
</div>
</div>
</nav>

22
signin.php Normal file
View File

@@ -0,0 +1,22 @@
<?php
/**
* Page details
*/
$page_title = 'Log In or Sign Up: Start Your Dating Journey';
$page_description = 'Log in or create a Stella Amor account. Your path to personalized online dating with advanced matchmaking starts here. Join now!';
include($_SERVER['DOCUMENT_ROOT'] . '/rss/php/includes/header.php');
?>
<div class="login-page">
<div class="login">
<img src="/rss/img/logo.png" alt="Stella Amor" class="logo">
<form method="POST" action="#" id="loginForm">
<input type="text" placeholder="Username" id="username" class="input">
<input type="password" placeholder="Password" id="password" class="input">
<button type="submit" class="login-button">Log In</button>
</form>
<!-- <a href="#" class="forgot-password">Lost your password?</a> -->
</div>
</div>
<?php include($_SERVER['DOCUMENT_ROOT'] . '/rss/php/includes/footer.php');?>

23
sitemap.xml Normal file
View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<!-- Homepage -->
<url>
<loc>https://stellaamor.com/</loc>
<lastmod>2024-12-15</lastmod>
<priority>1.0</priority>
</url>
<!-- Login/Sign-Up Page -->
<url>
<loc>https://stellaamor.com/login</loc>
<lastmod>2024-12-15</lastmod>
<priority>0.8</priority>
</url>
<!-- About Us Page -->
<url>
<loc>https://stellaamor.com/about</loc>
<lastmod>2024-12-15</lastmod>
<priority>0.6</priority>
</url>
</urlset>