A fast, local-first "redirection engine" for !bang users with a few extra features ^-^

chore: run prettier

Changed files
+137 -138
public
+3 -3
.prettierrc
···
{
-
"useTabs": true,
-
"singleQuote": false,
-
"tabWidth": 2
}
···
{
+
"useTabs": true,
+
"singleQuote": false,
+
"tabWidth": 2
}
+1 -2
LICENSE.md
···
-
The MIT License (MIT)
-
=====================
Copyright © `2025` `Kieran Klukas`
···
+
# The MIT License (MIT)
Copyright © `2025` `Kieran Klukas`
+36 -36
index.html
···
<!doctype html>
<html lang="en">
-
<head>
-
<meta charset="UTF-8" />
-
<link rel="icon" type="image/svg+xml" href="/search.svg" />
-
<link
-
rel="preconnect"
-
href="https://fonts.googleapis.com"
-
crossorigin="anonymous"
-
/>
-
<link
-
rel="preconnect"
-
href="https://fonts.gstatic.com"
-
crossorigin="anonymous"
-
/>
-
<link
-
rel="preload"
-
as="style"
-
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
-
/>
-
<link
-
rel="stylesheet"
-
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
-
media="print"
-
onload="this.media='all'"
-
/>
-
<link rel="stylesheet" href="/global.css" />
-
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
-
<title>Unduck</title>
-
<meta
-
name="description"
-
content="A better default search engine (with bangs!)"
-
/>
-
</head>
-
<body>
-
<div id="app"></div>
-
<script type="module" src="/src/main.ts"></script>
-
</body>
</html>
···
<!doctype html>
<html lang="en">
+
<head>
+
<meta charset="UTF-8" />
+
<link rel="icon" type="image/svg+xml" href="/search.svg" />
+
<link
+
rel="preconnect"
+
href="https://fonts.googleapis.com"
+
crossorigin="anonymous"
+
/>
+
<link
+
rel="preconnect"
+
href="https://fonts.gstatic.com"
+
crossorigin="anonymous"
+
/>
+
<link
+
rel="preload"
+
as="style"
+
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
+
/>
+
<link
+
rel="stylesheet"
+
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
+
media="print"
+
onload="this.media='all'"
+
/>
+
<link rel="stylesheet" href="/global.css" />
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+
<title>Unduck</title>
+
<meta
+
name="description"
+
content="A better default search engine (with bangs!)"
+
/>
+
</head>
+
<body>
+
<div id="app"></div>
+
<script type="module" src="/src/main.ts"></script>
+
</body>
</html>
+97 -97
public/global.css
···
/* Font fallback that closely matches Inter metrics */
@font-face {
-
font-family: "Inter Fallback";
-
size-adjust: 107%;
-
ascent-override: 90%;
-
src: local("Arial");
}
:root {
-
font-family:
-
Inter,
-
"Inter Fallback",
-
system-ui,
-
-apple-system,
-
BlinkMacSystemFont,
-
"Segoe UI",
-
Roboto,
-
Oxygen,
-
Ubuntu,
-
Cantarell,
-
"Open Sans",
-
"Helvetica Neue",
-
sans-serif;
-
font-synthesis: none;
-
text-rendering: optimizeLegibility;
-
-webkit-font-smoothing: antialiased;
-
-moz-osx-font-smoothing: grayscale;
-
/* Light mode colors */
-
--text-color: #1a1a1a;
-
--text-color-secondary: #666;
-
--text-color-hover: #333;
-
--bg-color: #fff;
-
--bg-color-secondary: #f5f5f5;
-
--bg-color-hover: #f0f0f0;
-
--bg-color-active: #e5e5e5;
-
--border-color: #ddd;
}
@media (prefers-color-scheme: dark) {
-
:root {
-
--text-color: #e0e0e0;
-
--text-color-secondary: #999;
-
--text-color-hover: #fff;
-
--bg-color: #121212;
-
--bg-color-secondary: #1e1e1e;
-
--bg-color-hover: #2a2a2a;
-
--bg-color-active: #333;
-
--border-color: #444;
-
}
}
* {
-
margin: 0;
-
padding: 0;
-
box-sizing: border-box;
}
html,
body {
-
height: 100%;
-
width: 100%;
}
body {
-
line-height: 1.5;
-
font-weight: 400;
-
font-size: 16px;
-
color: var(--text-color);
-
background-color: var(--bg-color);
}
h1,
···
h4,
h5,
h6 {
-
font-weight: 600;
-
line-height: 1.2;
-
padding: 0.75rem;
}
a {
-
color: var(--text-color-secondary);
}
a:hover {
-
color: var(--text-color-hover);
}
button {
-
font: inherit;
-
border: none;
-
background: none;
-
cursor: pointer;
}
input,
textarea {
-
font: inherit;
}
/* Add these new styles */
.url-container {
-
display: flex;
-
align-items: center;
-
gap: 8px;
-
margin-top: 16px;
}
/* Add this new style */
.content-container {
-
max-width: 37rem;
-
text-align: center;
-
padding: 0 8px;
}
/* Update url-input width to be 100% since container will control max width */
.url-input {
-
padding: 8px 12px;
-
border: 1px solid var(--border-color);
-
border-radius: 4px;
-
width: 100%;
-
background: var(--bg-color-secondary);
-
color: var(--text-color);
}
.copy-button {
-
padding: 8px;
-
color: var(--text-color-secondary);
-
border-radius: 4px;
-
transition: all 0.2s;
-
display: flex;
-
align-items: center;
-
justify-content: center;
}
.copy-button:hover {
-
background: var(--bg-color-hover);
}
.copy-button:active {
-
background: var(--bg-color-active);
}
.copy-button img {
-
width: 20px;
-
height: 20px;
}
.copy-button.copied {
-
background: #28a745;
}
/* Add footer styles */
.footer {
-
position: fixed;
-
bottom: 16px;
-
left: 0;
-
right: 0;
-
text-align: center;
-
font-size: 14px;
-
color: var(--text-color-secondary);
}
.footer a {
-
color: var(--text-color-secondary);
-
text-decoration: none;
-
font-weight: 500;
}
.footer a:hover {
-
color: var(--text-color-hover);
}
···
/* Font fallback that closely matches Inter metrics */
@font-face {
+
font-family: "Inter Fallback";
+
size-adjust: 107%;
+
ascent-override: 90%;
+
src: local("Arial");
}
:root {
+
font-family:
+
Inter,
+
"Inter Fallback",
+
system-ui,
+
-apple-system,
+
BlinkMacSystemFont,
+
"Segoe UI",
+
Roboto,
+
Oxygen,
+
Ubuntu,
+
Cantarell,
+
"Open Sans",
+
"Helvetica Neue",
+
sans-serif;
+
font-synthesis: none;
+
text-rendering: optimizeLegibility;
+
-webkit-font-smoothing: antialiased;
+
-moz-osx-font-smoothing: grayscale;
+
/* Light mode colors */
+
--text-color: #1a1a1a;
+
--text-color-secondary: #666;
+
--text-color-hover: #333;
+
--bg-color: #fff;
+
--bg-color-secondary: #f5f5f5;
+
--bg-color-hover: #f0f0f0;
+
--bg-color-active: #e5e5e5;
+
--border-color: #ddd;
}
@media (prefers-color-scheme: dark) {
+
:root {
+
--text-color: #e0e0e0;
+
--text-color-secondary: #999;
+
--text-color-hover: #fff;
+
--bg-color: #121212;
+
--bg-color-secondary: #1e1e1e;
+
--bg-color-hover: #2a2a2a;
+
--bg-color-active: #333;
+
--border-color: #444;
+
}
}
* {
+
margin: 0;
+
padding: 0;
+
box-sizing: border-box;
}
html,
body {
+
height: 100%;
+
width: 100%;
}
body {
+
line-height: 1.5;
+
font-weight: 400;
+
font-size: 16px;
+
color: var(--text-color);
+
background-color: var(--bg-color);
}
h1,
···
h4,
h5,
h6 {
+
font-weight: 600;
+
line-height: 1.2;
+
padding: 0.75rem;
}
a {
+
color: var(--text-color-secondary);
}
a:hover {
+
color: var(--text-color-hover);
}
button {
+
font: inherit;
+
border: none;
+
background: none;
+
cursor: pointer;
}
input,
textarea {
+
font: inherit;
}
/* Add these new styles */
.url-container {
+
display: flex;
+
align-items: center;
+
gap: 8px;
+
margin-top: 16px;
}
/* Add this new style */
.content-container {
+
max-width: 37rem;
+
text-align: center;
+
padding: 0 8px;
}
/* Update url-input width to be 100% since container will control max width */
.url-input {
+
padding: 8px 12px;
+
border: 1px solid var(--border-color);
+
border-radius: 4px;
+
width: 100%;
+
background: var(--bg-color-secondary);
+
color: var(--text-color);
}
.copy-button {
+
padding: 8px;
+
color: var(--text-color-secondary);
+
border-radius: 4px;
+
transition: all 0.2s;
+
display: flex;
+
align-items: center;
+
justify-content: center;
}
.copy-button:hover {
+
background: var(--bg-color-hover);
}
.copy-button:active {
+
background: var(--bg-color-active);
}
.copy-button img {
+
width: 20px;
+
height: 20px;
}
.copy-button.copied {
+
background: #28a745;
}
/* Add footer styles */
.footer {
+
position: fixed;
+
bottom: 16px;
+
left: 0;
+
right: 0;
+
text-align: center;
+
font-size: 14px;
+
color: var(--text-color-secondary);
}
.footer a {
+
color: var(--text-color-secondary);
+
text-decoration: none;
+
font-weight: 500;
}
.footer a:hover {
+
color: var(--text-color-hover);
}