This commit is contained in:
planetabhi
2024-09-01 18:24:35 +05:30
parent 91452ee5a8
commit cf9df6e871
13 changed files with 4365 additions and 6655 deletions

20
LICENSE.txt Normal file
View File

@@ -0,0 +1,20 @@
MIT License
Copyright (c) 2024 Abhimanyu Rana @planetabhi
Copyright (c) 2024 Method Black Studio
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, and/or publish copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -1,4 +1,3 @@
## Directory Template
## Directory
For the getting started guide, please refer to the [template documentation](https://new-ui.com/docs/templates/directory).
- For the getting started guide, please refer to the [template documentation](https://new-ui.com/docs/templates/directory).
- Have a question? Send an email to [contact@new-ui.com](mailto:contact@new-ui.com)

View File

@@ -1,11 +1,12 @@
import { defineConfig } from 'astro/config';
import react from "@astrojs/react";
import netlify from "@astrojs/netlify";
import cloudflare from "@astrojs/cloudflare";
// https://astro.build/config
export default defineConfig({
output: "server",
adapter: cloudflare(),
integrations: [react()]
integrations: [react()],
//output: "server",
//adapter: netlify()
});

6507
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,9 @@
{
"name": "riseofmachine",
"type": "module",
"version": "0.1.0",
"description": "Discover 300+ AI tools curated for makers and SMBs.",
"type": "module",
"private": true,
"scripts": {
"dev": "astro dev",
"start": "astro dev",
@@ -10,7 +12,7 @@
"astro": "astro"
},
"dependencies": {
"@astrojs/cloudflare": "^9.2.0",
"@astrojs/netlify": "^5.5.1",
"@astrojs/react": "^3.6.2",
"@types/react": "^18.3.5",
"@types/react-dom": "^18.3.0",
@@ -25,10 +27,10 @@
"@new-ui/spacings": "^0.1.3",
"@new-ui/typography": "^0.1.6"
},
"description": "Discover 300+ AI tools curated for indie hackers, makers, and SMBs.",
"repository": {
"type": "git",
"url": "git+https://github.com/MethodBlack/riseofmachine.git"
"url": "git+https://github.com/New-Templates/directory.git"
},
"author": "Abhimanyu Rana <contact@new-ui.com> (https://new-ui.com/)"
"author": "@planetabhi <contact@new-ui.com> (https://new-ui.com/)",
"license": "MIT"
}

4255
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

View File

@@ -4,14 +4,14 @@
background-color: var(--background-secondary);
background-position: 100%;
border-radius: var(--spacing-03);
height: 136px;
height: 8.5rem;
position: relative;
--shadow-color: rgb(0 0 0 / 0.04);
box-shadow: 0px 0px 0px 1px var(--background-selected),
0px 1px 1px -0.5px var(--shadow-color),
0px 3px 3px -1.5px var(--shadow-color),
0px 12px 12px -6px var(--shadow-color);
transition:all .12s ease-out;
transition:all .2s ease-out;
}
.link-card>a {
@@ -19,6 +19,7 @@
text-decoration: none;
padding: 0.8rem 1.2rem;
color: var(--support-info);
justify-content: space-between;
}
p {
@@ -44,7 +45,7 @@ span.tag {
padding: calc(.25rem - 1px) calc(.5rem - 1px);
border-radius: var(--spacing-02);
display: inline-block;
color: var(--text-primary-alt);
color: var(--text-primary);
margin-top: var(--spacing-08);
font-size: var(--desktop-caption);
line-height: var(--lh-desktop-caption);

View File

@@ -5,9 +5,9 @@ export default function Card(props) {
return <li className="link-card">
<a href={href}>
<h6 className="nu-c-h6 nu-u-mt-1 nu-u-mb-1">
<strong className="nu-c-h6 nu-u-mt-1 nu-u-mb-1">
{title}
</h6>
</strong>
<p className="nu-c-fs-small nu-u-mt-1 nu-u-mb-1">
{body}
</p>

View File

@@ -8,15 +8,14 @@
border-bottom: 2px solid transparent;
font-family: var(--body-copy);
font-weight: 400;
color: var(--text-secondary-alt);
}
.nav__item:hover {
color: var(--text-secondary);
}
.nav__item.is-active {
font-weight: 500;
.nav__item:hover {
color: var(--text-primary);
border-bottom: 2px solid var(--icon-primary);
}
.nav__item.is-active {
color: var(--text-primary);
border-bottom: 3px solid var(--icon-primary);
}

View File

@@ -16,12 +16,12 @@ const { site, title, tagline } = Astro.props;
<link rel="icon" type="image/svg+xml" href="/icon.png" />
<script src="./theme.js"></script>
<meta name="generator" content={Astro.generator} />
<title>{site} — Discover 300+ AI tools curated for indie hackers, makers, and SMBs.</title>
<title>{site} — Discover 300+ AI tools curated for makers and SMBs.</title>
<meta name="author" content="Method Black">
<meta name="description" content="Discover 300+ AI tools curated for indie hackers, makers, and SMBs.">
<meta name="description" content="Discover 300+ AI tools curated for makers and SMBs.">
<meta property="og:title" content="Rise of Machine">
<meta property="og:type" content="website" />
<meta property="og:description" content="Discover 300+ AI tools curated for indie hackers, makers, and SMBs.">
<meta property="og:description" content="Discover 300+ AI tools curated for makers and SMBs.">
<meta property="og:image" content="https://res.cloudinary.com/drwfwpkeo/image/upload/v1703755911/Light_Screenshot_ub9ydn.png">
<meta property="og:url" content="https://riseofmachine.com/">
<meta name="twitter:card" content="summary_large_image">
@@ -69,38 +69,23 @@ const { site, title, tagline } = Astro.props;
<h1 class="nu-c-h3 nu-u-text--primary nu-u-mt-0 nu-u-mb-2 title">
{title}
</h1>
<p class="nu-c-fs-normal nu-u-text--secondary-alt description-text">{tagline}</p>
<p class="nu-c-fs-normal nu-u-text--secondary description-text">{tagline}</p>
</div>
</header>
<slot />
<div class="footer">
<p>Curated by <a href="https://planetabhi.com/" class="nu-u-link--subtle" target="_blank">@planetabhi</a>. Built with <a href="https://new-ui.com/templates/directory" class="nu-u-link--subtle" target="_blank">New UI</a> &amp; Astro. [┐∵]┘</p>
<p>Curated by <a href="https://planetabhi.com/" class="nu-u-link--subtle" target="_blank">@planetabhi</a> · Built with New UI &amp; Astro · <a href="https://new-ui.com/templates/directory" class="nu-u-link--subtle" target="_blank">Grab this template</a></p>
</div>
</body>
</html>
<style is:global>
@font-face {
font-family: 'body-copy';
src: url('/fonts/body-copy.woff') format('woff');
font-weight: normal;
font-style: normal;
font-display: swap;
}
@font-face {
font-family: 'body-copy';
src: url('/fonts/body-copy.woff2') format('woff2');
font-weight: normal;
font-style: normal;
font-display: swap;
}
:root {
--accent: var(--support-info);
--body-copy: 'body-copy', system-ui, sans-serif;
}
html {
font-family: var(--body-copy);
font-family: var(--system-ui);
background-color: var(--background);
}
body {
@@ -120,7 +105,7 @@ const { site, title, tagline } = Astro.props;
margin-top: var(--spacing-00);
}
p.description-text {
max-inline-size: 600px;
max-inline-size: 37.5rem;
}
.nu-u-link--subtle {
color: var(--text-secondary) !important;
@@ -215,9 +200,7 @@ const { site, title, tagline } = Astro.props;
display: flex;
justify-content: center;
align-items: center;
/* border: 1px solid var(--border-muted); */
border-radius: var(--spacing-02);
/* background-color: var(--background); */
@nest [data-theme="dark"] & {
--icon-fill: var(--icon-secondary);
@@ -234,7 +217,7 @@ const { site, title, tagline } = Astro.props;
line-height: var(--lh-desktop-body);
}
@media (max-width: 480px) {
@media (max-width: 30rem) {
main {margin: auto var(--spacing-06);}
.floating-nav { padding: var(--spacing-06) var(--spacing-06);}
.container { margin: var(--spacing-06);}
@@ -242,7 +225,7 @@ const { site, title, tagline } = Astro.props;
/* logo animation */
.logo {
transition: all .12s ease-out;
transition: all .2s ease-out;
padding-top: var(--spacing-03);
}
.logo:hover {
@@ -269,88 +252,66 @@ const { site, title, tagline } = Astro.props;
transform: scale(1.2);
}
}
</style>
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-BLXD7VCZH0"
></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", "G-BLXD7VCZH0");
</script>
<script>
// Scrolls back to top on page refresh
history.scrollRestoration = "manual";
window.onbeforeunload = function () {
window.scrollTo(0, 0);
};
history.scrollRestoration = "manual";
window.onbeforeunload = function () {
window.scrollTo(0, 0);
};
const nav = document.querySelector('.floating-nav');
const pageCTA = document.querySelector('.floating-nav .submit-btn');
const nav = document.querySelector('.floating-nav');
const pageCTA = document.querySelector('.floating-nav .submit-btn');
var pageCTAPosition = 0;
if (pageCTA) {
pageCTAPosition = pageCTA.getBoundingClientRect().bottom;
}
var pageCTAPosition = 0;
if (pageCTA) {
pageCTAPosition = pageCTA.getBoundingClientRect().bottom;
}
var previousScrollPosition = 0;
var previousScrollPosition = 0;
const handleNavScroll = () => {
let currentScrolledPosition = window.scrollY || window.pageYOffset;
if (isScrollingDown()) {
nav.classList.add("scroll-down");
nav.classList.remove("scroll-up");
} else {
nav.classList.add("scroll-up");
nav.classList.remove("scroll-down");
}
if (currentScrolledPosition > pageCTAPosition + 50) {
if (!nav.classList.contains("is-active")) {
nav.classList.add("is-active");
}
} else {
if (nav.classList.contains("is-active")) {
nav.classList.remove("is-active");
}
}
};
function isScrollingDown() {
let currentScrolledPosition = window.scrollY || window.pageYOffset;
let scrollingDown;
if (currentScrolledPosition > previousScrollPosition) {
scrollingDown = true;
} else {
scrollingDown = false;
}
previousScrollPosition = currentScrolledPosition;
return scrollingDown;
const handleNavScroll = () => {
let currentScrolledPosition = window.scrollY || window.pageYOffset;
if (isScrollingDown()) {
nav.classList.add("scroll-down");
nav.classList.remove("scroll-up");
} else {
nav.classList.add("scroll-up");
nav.classList.remove("scroll-down");
}
var throttleWait;
function throttle(callback, time) {
if (throttleWait) return;
throttleWait = true;
setTimeout(() => {
callback();
throttleWait = false;
}, time);
if (currentScrolledPosition > pageCTAPosition + 50) {
if (!nav.classList.contains("is-active")) {
nav.classList.add("is-active");
}
} else {
if (nav.classList.contains("is-active")) {
nav.classList.remove("is-active");
}
}
};
window.addEventListener("scroll", () => {
throttle(handleNavScroll, 80);
});
function isScrollingDown() {
let currentScrolledPosition = window.scrollY || window.pageYOffset;
let scrollingDown;
if (currentScrolledPosition > previousScrollPosition) {
scrollingDown = true;
} else {
scrollingDown = false;
}
previousScrollPosition = currentScrolledPosition;
return scrollingDown;
}
var throttleWait;
function throttle(callback, time) {
if (throttleWait) return;
throttleWait = true;
setTimeout(() => {
callback();
throttleWait = false;
}, time);
}
window.addEventListener("scroll", () => {
throttle(handleNavScroll, 80);
});
</script>

View File

@@ -1,6 +1,7 @@
---
import Layout from "../layouts/Layout.astro";
import "@new-ui/reset";
import "@new-ui/colors";
import "@new-ui/typography";
import "@new-ui/effects";
@@ -11,31 +12,9 @@ import Dashboard from "../components/Dashboard";
<Layout
site="Rise of Machine"
title="Make the Most of It"
tagline="Discover 300+ AI tools curated for indie hackers, makers, and SMBs."
tagline="Discover 300+ AI tools curated for makers and SMBs."
>
<main>
<Dashboard client:load />
</main>
</Layout>
<style>
h6.separator {
margin: 1rem 0;
color: var(--text-secondary);
display: table;
}
h6.separator:after {
border-top: 2px dotted var(--border-muted);
content: "";
display: table-cell;
position: relative;
top: var(--spacing-06);
width: 100%;
}
h6.separator:before {
right: 1%;
}
h6.separator:after {
left: 1%;
}
</style>