setup
This commit is contained in:
20
LICENSE.txt
Normal file
20
LICENSE.txt
Normal 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.
|
||||
@@ -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)
|
||||
|
||||
@@ -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
6507
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
12
package.json
12
package.json
@@ -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
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.
@@ -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);
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
@@ -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> & Astro. [┐∵]┘</p>
|
||||
<p>Curated by <a href="https://planetabhi.com/" class="nu-u-link--subtle" target="_blank">@planetabhi</a> · Built with New UI & 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>
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user