Remove old code
This commit is contained in:
-147
@@ -1,147 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>cozis news - login</title>
|
||||
<style>
|
||||
body {
|
||||
line-height: 200%;
|
||||
font-family: monospace;
|
||||
max-width: 800px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
nav {
|
||||
overflow: auto;
|
||||
background: #5780C9;
|
||||
color: #6E93D4;
|
||||
padding: 5px 10px;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
nav div {
|
||||
float: left
|
||||
}
|
||||
nav div:last-child {
|
||||
float: right
|
||||
}
|
||||
nav a {
|
||||
font-size: 14px;
|
||||
color: #1D2B42;
|
||||
}
|
||||
nav a.current {
|
||||
font-weight: bold;
|
||||
}
|
||||
main {
|
||||
padding: 5px 10px;
|
||||
background: #F7E6C0;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
footer {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
/* Login form styles */
|
||||
.login-container {
|
||||
max-width: 400px;
|
||||
margin: 40px auto;
|
||||
padding: 30px;
|
||||
background: #E8D4A9;
|
||||
border-radius: 5px;
|
||||
border: 1px solid #D4C298;
|
||||
}
|
||||
.login-container h2 {
|
||||
text-align: center;
|
||||
margin-bottom: 30px;
|
||||
color: #1D2B42;
|
||||
font-size: 18px;
|
||||
}
|
||||
.form-group {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.form-group label {
|
||||
display: block;
|
||||
margin-bottom: 5px;
|
||||
color: #7A5F2A;
|
||||
font-size: 14px;
|
||||
}
|
||||
.form-group input {
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
font-family: monospace;
|
||||
font-size: 14px;
|
||||
background: #F7E6C0;
|
||||
border: 1px solid #D4C298;
|
||||
border-radius: 3px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.form-group input:focus {
|
||||
outline: none;
|
||||
border-color: #5780C9;
|
||||
background: #fff;
|
||||
}
|
||||
.login-button {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
background: #5780C9;
|
||||
color: #F7E6C0;
|
||||
border: none;
|
||||
border-radius: 3px;
|
||||
font-family: monospace;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.login-button:hover {
|
||||
background: #1D2B42;
|
||||
}
|
||||
.form-links {
|
||||
text-align: center;
|
||||
font-size: 12px;
|
||||
}
|
||||
.form-links a {
|
||||
color: #7A5F2A;
|
||||
margin: 0 10px;
|
||||
}
|
||||
.form-links a:hover {
|
||||
color: #1D2B42;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<div>
|
||||
<a href="/new">new</a>
|
||||
|
|
||||
<a href="">hot</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="">settings</a>
|
||||
|
|
||||
<a href="/login" class="current">login</a>
|
||||
</div>
|
||||
</nav>
|
||||
<main>
|
||||
<div class="login-container">
|
||||
<h2>Welcome back!</h2>
|
||||
<form action="/api/login" method="POST">
|
||||
<div class="form-group">
|
||||
<label for_="username">Username:</label>
|
||||
<input type="text" id="username" name="username" required />
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for_="password">Password:</label>
|
||||
<input type="password" id="password" name="password" required />
|
||||
</div>
|
||||
<button type="submit" class="login-button">log in</button>
|
||||
<div class="form-links">
|
||||
<a href="">forgot password?</a>
|
||||
|
|
||||
<a href="">create account</a>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
Made with love by cozis
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
-121
@@ -1,121 +0,0 @@
|
||||
|
||||
fun page(title, style, content)
|
||||
<html>
|
||||
<head>
|
||||
<title>CN - \title</title>
|
||||
<style>
|
||||
body {
|
||||
line-height: 200%;
|
||||
font-family: monospace;
|
||||
max-width: 800px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
nav {
|
||||
overflow: auto;
|
||||
background: #5780C9;
|
||||
color: #6E93D4;
|
||||
padding: 5px 10px;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
nav div {
|
||||
float: left
|
||||
}
|
||||
nav div:last-child {
|
||||
float: right
|
||||
}
|
||||
nav a {
|
||||
font-size: 14px;
|
||||
color: #1D2B42;
|
||||
}
|
||||
nav a.current {
|
||||
font-weight: bold;
|
||||
}
|
||||
main {
|
||||
padding: 5px 10px;
|
||||
background: #F7E6C0;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
footer {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
</style>
|
||||
\(style)
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<div>
|
||||
<a href="/new" class="current">new</a>
|
||||
|
|
||||
<a href="">hot</a>
|
||||
</div>
|
||||
\if $login_username == none:
|
||||
<div>
|
||||
<a href="/login">log-in</a>
|
||||
|
|
||||
<a href="/signup">sign-up</a>
|
||||
</div>
|
||||
else
|
||||
<div>
|
||||
<a href="">settings</a>
|
||||
|
|
||||
<a href="/logout">log-out</a>
|
||||
</div>
|
||||
</nav>
|
||||
<main>
|
||||
\content
|
||||
</main>
|
||||
<footer>
|
||||
Made with love by cozis
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
let posts = [
|
||||
{ title: "Show HN: Kitten TTS - 25MB CPU-Only, Open-Source TTS Model", date: "3 hours ago", num_comments: 127, link: "https://github.com/KittenML/KittenTTS" },
|
||||
{ title: "Open models by OpenAI", date: "15 hours ago", num_comments: 651, link: "https://openai.com/open-models/" },
|
||||
{ title: "Anthropic rejects the main developer of the library they use", date: "40 minutes ago", num_comments: 437, link: "https://grell.dev/blog/ai_rejection" },
|
||||
]
|
||||
|
||||
let style =
|
||||
<style>
|
||||
.item {
|
||||
overflow: auto;
|
||||
border-bottom: 1px solid #E8D4A9;
|
||||
font-size: 14px;
|
||||
}
|
||||
.item:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
.item span {
|
||||
color: #7A5F2A;
|
||||
text-decoration: none;
|
||||
}
|
||||
.item div {
|
||||
color: #E8D4A9;
|
||||
float: left
|
||||
}
|
||||
.item div:first-child {
|
||||
width: calc(100% - 250px);
|
||||
}
|
||||
.item div:last-child {
|
||||
width: 250px;
|
||||
text-align: right;
|
||||
}
|
||||
</style>
|
||||
|
||||
let content =
|
||||
<div>
|
||||
\for post in posts:
|
||||
<div class="item">
|
||||
<div>
|
||||
<a href=post.link>\post.title</a>
|
||||
</div>
|
||||
<div>
|
||||
<span>\post.date</span> | <span><a href="/thread">\post.num_comments comments</a></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
page("new", style, content)
|
||||
-114
@@ -1,114 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>cozis news - not found</title>
|
||||
<style>
|
||||
body {
|
||||
line-height: 200%;
|
||||
font-family: monospace;
|
||||
max-width: 800px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
nav {
|
||||
overflow: auto;
|
||||
background: #5780C9;
|
||||
color: #6E93D4;
|
||||
padding: 5px 10px;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
nav div {
|
||||
float: left
|
||||
}
|
||||
nav div:last-child {
|
||||
float: right
|
||||
}
|
||||
nav a {
|
||||
font-size: 14px;
|
||||
color: #1D2B42;
|
||||
}
|
||||
nav a.current {
|
||||
font-weight: bold;
|
||||
}
|
||||
main {
|
||||
padding: 5px 10px;
|
||||
background: #F7E6C0;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
footer {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
/* 404 page styles */
|
||||
.not-found-container {
|
||||
text-align: center;
|
||||
padding: 60px 20px;
|
||||
}
|
||||
.error-code {
|
||||
font-size: 72px;
|
||||
font-weight: bold;
|
||||
color: #7A5F2A;
|
||||
margin-bottom: 20px;
|
||||
line-height: 100%;
|
||||
}
|
||||
.error-message {
|
||||
font-size: 24px;
|
||||
color: #1D2B42;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.error-description {
|
||||
font-size: 14px;
|
||||
color: #7A5F2A;
|
||||
margin-bottom: 40px;
|
||||
max-width: 500px;
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
line-height: 160%;
|
||||
}
|
||||
|
||||
.home-button {
|
||||
display: inline-block;
|
||||
background: #5780C9;
|
||||
color: #F7E6C0;
|
||||
padding: 12px 24px;
|
||||
text-decoration: none;
|
||||
border-radius: 5px;
|
||||
font-size: 14px;
|
||||
margin-top: 20px;
|
||||
border: none;
|
||||
cursor: pointer;
|
||||
}
|
||||
.home-button:hover {
|
||||
background: #1D2B42;
|
||||
color: #F7E6C0;
|
||||
}
|
||||
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<div>
|
||||
<a href="/new">new</a>
|
||||
|
|
||||
<a href="">hot</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="">settings</a>
|
||||
|
|
||||
<a href="/login">log-out</a>
|
||||
</div>
|
||||
</nav>
|
||||
<main>
|
||||
<div class="not-found-container">
|
||||
<div class="error-code">404</div>
|
||||
<div class="error-message">Page Not Found</div>
|
||||
<div class="error-description">
|
||||
Looks like this page wandered off somewhere.
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<footer>
|
||||
Made with love by cozis
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,21 +0,0 @@
|
||||
include "pages/page.wl"
|
||||
include "pages/login_and_signup_style.wl"
|
||||
|
||||
let main =
|
||||
<main>
|
||||
<span>Welcome!</span>
|
||||
<form action="/api/signup" method="POST">
|
||||
<input type="text" name="username" placeholder="username" />
|
||||
<input type="email" name="email" placeholder="email" />
|
||||
<input type="password" name="password1" placeholder="password" />
|
||||
<input type="password" name="password2" placeholder="repeat password" />
|
||||
<input type="submit" value="Sign-Up" />
|
||||
<div class="form-links">
|
||||
<a href="">forgot password?</a>
|
||||
|
|
||||
<a href="">already have an account?</a>
|
||||
</div>
|
||||
</form>
|
||||
</main>
|
||||
|
||||
page("Log-In", none, style, main)
|
||||
-340
@@ -1,340 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<title>cozis news - thread</title>
|
||||
<style>
|
||||
body {
|
||||
line-height: 200%;
|
||||
font-family: monospace;
|
||||
max-width: 800px;
|
||||
margin: 20px auto;
|
||||
}
|
||||
nav {
|
||||
overflow: auto;
|
||||
background: #5780C9;
|
||||
color: #6E93D4;
|
||||
padding: 5px 10px;
|
||||
border-top-left-radius: 3px;
|
||||
border-top-right-radius: 3px;
|
||||
}
|
||||
nav div {
|
||||
float: left
|
||||
}
|
||||
nav div:last-child {
|
||||
float: right
|
||||
}
|
||||
nav a {
|
||||
font-size: 14px;
|
||||
color: #1D2B42;
|
||||
}
|
||||
nav a.current {
|
||||
font-weight: bold;
|
||||
}
|
||||
main {
|
||||
padding: 5px 10px;
|
||||
background: #F7E6C0;
|
||||
border-bottom-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
||||
footer {
|
||||
padding: 5px 10px;
|
||||
}
|
||||
|
||||
/* Thread styles */
|
||||
.thread-header {
|
||||
padding: 15px 0;
|
||||
border-bottom: 2px solid #E8D4A9;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.thread-title {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
margin-bottom: 8px;
|
||||
}
|
||||
.thread-title a {
|
||||
color: #1D2B42;
|
||||
text-decoration: none;
|
||||
}
|
||||
.thread-title a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.thread-meta {
|
||||
font-size: 12px;
|
||||
color: #7A5F2A;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.thread-meta a {
|
||||
color: #7A5F2A;
|
||||
}
|
||||
.thread-text {
|
||||
font-size: 14px;
|
||||
color: #1D2B42;
|
||||
line-height: 160%;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
.thread-actions {
|
||||
font-size: 12px;
|
||||
}
|
||||
.thread-actions a {
|
||||
color: #7A5F2A;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/* Comment styles */
|
||||
.comment {
|
||||
margin-bottom: 15px;
|
||||
border-left: 1px solid #E8D4A9;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.comment.level-0 { margin-left: 0px; }
|
||||
.comment.level-1 { margin-left: 20px; }
|
||||
.comment.level-2 { margin-left: 40px; }
|
||||
.comment.level-3 { margin-left: 60px; }
|
||||
.comment.level-4 { margin-left: 80px; }
|
||||
|
||||
.comment-meta {
|
||||
font-size: 11px;
|
||||
color: #7A5F2A;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.comment-meta a {
|
||||
color: #7A5F2A;
|
||||
}
|
||||
.comment-text {
|
||||
font-size: 13px;
|
||||
color: #1D2B42;
|
||||
line-height: 150%;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.comment-actions {
|
||||
font-size: 11px;
|
||||
}
|
||||
.comment-actions a {
|
||||
color: #7A5F2A;
|
||||
margin-right: 8px;
|
||||
}
|
||||
.comment-actions a:hover {
|
||||
color: #1D2B42;
|
||||
}
|
||||
|
||||
.vote-buttons {
|
||||
float: left;
|
||||
width: 15px;
|
||||
margin-right: 8px;
|
||||
font-size: 10px;
|
||||
text-align: center;
|
||||
}
|
||||
.vote-buttons a {
|
||||
display: block;
|
||||
color: #7A5F2A;
|
||||
text-decoration: none;
|
||||
line-height: 100%;
|
||||
}
|
||||
.vote-buttons a:hover {
|
||||
color: #1D2B42;
|
||||
}
|
||||
|
||||
.comment-content {
|
||||
margin-left: 23px;
|
||||
}
|
||||
|
||||
.add-comment {
|
||||
margin: 20px 0;
|
||||
padding: 15px;
|
||||
background: #E8D4A9;
|
||||
border-radius: 3px;
|
||||
border: 1px solid #D4C298;
|
||||
}
|
||||
.add-comment textarea {
|
||||
width: 100%;
|
||||
height: 80px;
|
||||
font-family: monospace;
|
||||
font-size: 12px;
|
||||
background: #F7E6C0;
|
||||
border: 1px solid #D4C298;
|
||||
border-radius: 3px;
|
||||
padding: 8px;
|
||||
box-sizing: border-box;
|
||||
resize: vertical;
|
||||
}
|
||||
.add-comment button {
|
||||
background: #5780C9;
|
||||
color: #F7E6C0;
|
||||
border: none;
|
||||
border-radius: 3px;
|
||||
padding: 6px 12px;
|
||||
font-family: monospace;
|
||||
font-size: 12px;
|
||||
cursor: pointer;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.add-comment button:hover {
|
||||
background: #1D2B42;
|
||||
}
|
||||
|
||||
.collapsed {
|
||||
color: #7A5F2A;
|
||||
font-size: 11px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.collapsed:hover {
|
||||
color: #1D2B42;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<nav>
|
||||
<div>
|
||||
<a href="/new" class="current">new</a>
|
||||
|
|
||||
<a href="">hot</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="">settings</a>
|
||||
|
|
||||
<a href="/login">log-out</a>
|
||||
</div>
|
||||
</nav>
|
||||
<main>
|
||||
<div class="thread-header">
|
||||
<div class="thread-title">
|
||||
<a href="https://github.com/KittenML/KittenTTS">Show HN: Kitten TTS - 25MB CPU-Only, Open-Source TTS Model</a>
|
||||
</div>
|
||||
<div class="thread-meta">
|
||||
submitted 3 hours ago by <a href="">kittenlover42</a> | <a href="">127 comments</a>
|
||||
</div>
|
||||
<div class="thread-text">
|
||||
Hey HN! I've been working on Kitten TTS for the past 6 months - a tiny text-to-speech model that runs entirely on CPU. At just 25MB, it's perfect for embedded applications and privacy-focused projects where you don't want to send text to external services.
|
||||
<br/><br/>
|
||||
The model is trained on a diverse dataset and supports multiple languages. Performance is surprisingly good for the size - would love to hear your thoughts!
|
||||
</div>
|
||||
<div class="thread-actions">
|
||||
<a href="">reply</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="add-comment">
|
||||
<textarea placeholder="Add a comment..."></textarea>
|
||||
<button>add comment</button>
|
||||
</div>
|
||||
|
||||
<div class="comment level-0">
|
||||
<div class="vote-buttons">
|
||||
<a href="">▲</a>
|
||||
<a href="">▼</a>
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-meta">
|
||||
<a href="">techgeek99</a> 2 hours ago
|
||||
</div>
|
||||
<div class="comment-text">
|
||||
This is incredible! I've been looking for something exactly like this for my IoT project. The fact that it's only 25MB and runs on CPU is a game changer. How does the voice quality compare to larger models?
|
||||
</div>
|
||||
<div class="comment-actions">
|
||||
<a href="">reply</a> | <a href="">flag</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment level-1">
|
||||
<div class="vote-buttons">
|
||||
<a href="">▲</a>
|
||||
<a href="">▼</a>
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-meta">
|
||||
<a href="">kittenlover42</a> 2 hours ago
|
||||
</div>
|
||||
<div class="comment-text">
|
||||
Thanks! The voice quality is obviously not as good as larger models like Tacotron2 or the commercial APIs, but it's surprisingly decent for most use cases. I'd say it's about 75% of the quality at 1% of the size. Perfect for things like reading notifications aloud or simple voice interfaces.
|
||||
</div>
|
||||
<div class="comment-actions">
|
||||
<a href="">reply</a> | <a href="">flag</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment level-2">
|
||||
<div class="vote-buttons">
|
||||
<a href="">▲</a>
|
||||
<a href="">▼</a>
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-meta">
|
||||
<a href="">embedded_dev</a> 1 hour ago
|
||||
</div>
|
||||
<div class="comment-text">
|
||||
That sounds perfect for embedded applications! What's the inference speed like on something like a Raspberry Pi?
|
||||
</div>
|
||||
<div class="comment-actions">
|
||||
<a href="">reply</a> | <a href="">flag</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment level-0">
|
||||
<div class="vote-buttons">
|
||||
<a href="">▲</a>
|
||||
<a href="">▼</a>
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-meta">
|
||||
<a href="">ml_researcher</a> 2 hours ago
|
||||
</div>
|
||||
<div class="comment-text">
|
||||
Very impressive work! I'm curious about the architecture - are you using knowledge distillation from a larger model, or did you train this from scratch? The 25MB constraint must have required some clever optimizations.
|
||||
</div>
|
||||
<div class="comment-actions">
|
||||
<a href="">reply</a> | <a href="">flag</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment level-1">
|
||||
<div class="vote-buttons">
|
||||
<a href="">▲</a>
|
||||
<a href="">▼</a>
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-meta">
|
||||
<a href="">kittenlover42</a> 1 hour ago
|
||||
</div>
|
||||
<div class="comment-text">
|
||||
Great question! It's a combination approach. I started with a modified Tacotron architecture but with much smaller hidden dimensions, then used knowledge distillation from WaveNet to get the vocoder down to size. Also heavily quantized the weights and used some pruning techniques. Happy to share more technical details if you're interested!
|
||||
</div>
|
||||
<div class="comment-actions">
|
||||
<a href="">reply</a> | <a href="">flag</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment level-0">
|
||||
<div class="vote-buttons">
|
||||
<a href="">▲</a>
|
||||
<a href="">▼</a>
|
||||
</div>
|
||||
<div class="comment-content">
|
||||
<div class="comment-meta">
|
||||
<a href="">privacy_advocate</a> 1 hour ago
|
||||
</div>
|
||||
<div class="comment-text">
|
||||
Love that this runs locally! So tired of having to send my text to Google/Amazon/etc just to get speech synthesis. This is exactly what we need more of in the open source community.
|
||||
</div>
|
||||
<div class="comment-actions">
|
||||
<a href="">reply</a> | <a href="">flag</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="comment level-0">
|
||||
<div class="collapsed">
|
||||
[5 more comments]
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</main>
|
||||
<footer>
|
||||
Made with love by cozis
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user