@@ -74,7 +74,7 @@ function FeatureComponent(props: Feature) {
export default function HomepageFeatures() {
return (
-
+
{featureList.map((props, idx) => (
))}
diff --git a/src/components/pages/home/hero/hero-cards.tsx b/src/components/pages/home/hero/hero-cards.tsx
index 9b488ffe..b8747f54 100644
--- a/src/components/pages/home/hero/hero-cards.tsx
+++ b/src/components/pages/home/hero/hero-cards.tsx
@@ -1,16 +1,13 @@
-import clsx from 'clsx';
-import { CSSProperties, ReactNode } from 'react';
import { AppWidget } from './widgets/app-widget';
-import { WidgetCard } from './widgets/card';
import { ClockWidget } from './widgets/clock-widget';
import { DownloadsWidget } from './widgets/downloads-widget';
-import { WeatherWidget } from './widgets/weather-widget';
-import { StockWidget } from './widgets/stock-widget';
import { EntityStateWidget } from './widgets/entity-state-widget';
+import { StockWidget } from './widgets/stock-widget';
+import { WeatherWidget } from './widgets/weather-widget';
export const HeroCards = () => {
return (
-
+
diff --git a/src/components/pages/home/hero/hero-text.tsx b/src/components/pages/home/hero/hero-text.tsx
new file mode 100644
index 00000000..e52dd7d8
--- /dev/null
+++ b/src/components/pages/home/hero/hero-text.tsx
@@ -0,0 +1,44 @@
+import { cn } from '@site/src/lib/utils';
+import { motion, type MotionProps } from 'motion/react';
+
+interface LineShadowTextProps
+ extends Omit, keyof MotionProps>,
+ MotionProps {
+ shadowColor?: string;
+ as?: React.ElementType;
+}
+
+export function LineShadowText({
+ children,
+ shadowColor = 'black',
+ className,
+ as: Component = 'span',
+ ...props
+}: LineShadowTextProps) {
+ const MotionComponent = motion.create(Component);
+ const content = typeof children === 'string' ? children : null;
+
+ if (!content) {
+ throw new Error('LineShadowText only accepts string content');
+ }
+
+ return (
+
+ {content}
+
+ );
+}
+
+export default LineShadowText;
diff --git a/src/components/pages/home/hero/hero.tsx b/src/components/pages/home/hero/hero.tsx
index 1f0753ee..8344d54c 100644
--- a/src/components/pages/home/hero/hero.tsx
+++ b/src/components/pages/home/hero/hero.tsx
@@ -3,36 +3,49 @@ import { IconDownload } from '@tabler/icons-react';
import clsx from 'clsx';
import styles from '../../../../pages/index.module.css';
import { HeroCards } from './hero-cards';
+import LineShadowText from './hero-text';
export default function HomeHero() {
return (
-
-
-
A simple, yet powerful dashboard for your
- server.
-
+
+
+
+ A simple, yet
+
+
+ powerful
+
+ dashboard
+
+ for your server.
+
+
A sleek, modern dashboard that puts all of your apps and services at your fingertips.
- Control everything in one convenient location. Seamlessly integrates with the
- apps you've added, providing you with valuable information.
+ Control everything in one convenient location. Seamlessly integrates with the apps
+ you've added, providing you with valuable information.
{upwardTrend && }
{!upwardTrend && }
HOMR
diff --git a/src/components/pages/home/review-list/review-list.tsx b/src/components/pages/home/review-list/review-list.tsx
index ba536d3a..cc7d493b 100644
--- a/src/components/pages/home/review-list/review-list.tsx
+++ b/src/components/pages/home/review-list/review-list.tsx
@@ -1,11 +1,10 @@
-import React from 'react';
const reviews = [
{
username: 'Maeglin',
profilePicture: '/img/pictures/reviews/maeglin.webp',
fullText:
- 'Day 49/100 set up Homarr just for a test spin. It\'s a nice dashboard and the Arrs integration especialy the calendar is awesome.',
+ "Day 49/100 set up Homarr just for a test spin. It's a nice dashboard and the Arrs integration especially the calendar is awesome.",
link: 'https://twitter.com/Maeglin931/status/1555725442744586240',
},
{
@@ -17,12 +16,13 @@ const reviews = [
{
username: 'IBRACORP',
profilePicture: '/img/pictures/reviews/ibracorp.webp',
- fullText: 'Homarr Is Here To Stay. Here\'s Why | Selfhosted Homepage',
+ fullText: "Homarr Is Here To Stay. Here's Why | Selfhosted Homepage",
link: 'https://www.youtube.com/watch?v=Mk9ZZiH5qi0',
},
{
username: 'The Geek Freaks',
- profilePicture: 'https://yt3.ggpht.com/6EWnfiBIE7Bus2MAS6zJsBARQTPWE7B3v7PXdwX1OfohaxylMqdQr-vt4j8gYZTJy2MBiOvu=s500-c-k-c0x00ffffff-no-rj',
+ profilePicture:
+ 'https://yt3.ggpht.com/6EWnfiBIE7Bus2MAS6zJsBARQTPWE7B3v7PXdwX1OfohaxylMqdQr-vt4j8gYZTJy2MBiOvu=s500-c-k-c0x00ffffff-no-rj',
fullText: 'MEHR Durchblick mit eigenem Dashboard! (Unraid Homarr Tutorial) ',
link: 'https://www.youtube.com/watch?v=DNGRL5QdBlg',
},
@@ -35,22 +35,24 @@ const reviews = [
},
{
username: 'TechHut',
- profilePicture: 'https://yt3.ggpht.com/TUoF-6QCUIKy6XgFtMG5FWi5FLVhtaUPtTOLvE7Ca3eJif1_RKBci07fKK-QvKxhC0HALEBH7Q=s500-c-k-c0x00ffffff-no-rj',
+ profilePicture:
+ 'https://yt3.ggpht.com/TUoF-6QCUIKy6XgFtMG5FWi5FLVhtaUPtTOLvE7Ca3eJif1_RKBci07fKK-QvKxhC0HALEBH7Q=s500-c-k-c0x00ffffff-no-rj',
fullText: 'my FAVORITE Home Server Dashboard - Homarr Setup in Docker',
link: 'https://www.youtube.com/watch?v=A6vcTIzp_Ww',
},
{
username: 'u/RoachedCoach',
profilePicture: '/img/pictures/reviews/r_unraid.webp',
- fullText:
- 'I enjoy Homarr - mostly because it\'s very simple, straightforward, and attractive.',
+ fullText: "I enjoy Homarr - mostly because it's very simple, straightforward, and attractive.",
link: 'https://www.reddit.com/r/unRAID/comments/wk3x2s/comment/ijn4vpg/',
},
{
username: 'Mariushosting',
link: 'https://mariushosting.com/synology-install-homarr-with-portainer/',
- fullText: 'The thing I like most about Homarr is its speed and simplicity in adding links of your favorite docker apps. You can use it as a bookmark as well. Great integration with Plex, Sonarr, Radarr etc. Homarr supports multiple configs and persistent storage.',
- profilePicture: 'https://mariushosting.com/wp-content/uploads/2021/05/cropped-mariushosting512-192x192.png',
+ fullText:
+ 'The thing I like most about Homarr is its speed and simplicity in adding links of your favorite docker apps. You can use it as a bookmark as well. Great integration with Plex, Sonarr, Radarr etc. Homarr supports multiple configs and persistent storage.',
+ profilePicture:
+ 'https://mariushosting.com/wp-content/uploads/2021/05/cropped-mariushosting512-192x192.png',
},
{
username: 'u/YankeesIT',
@@ -61,7 +63,8 @@ const reviews = [
{
username: 'Selfhosted Corner',
profilePicture: 'https://pbs.twimg.com/profile_banners/1674813613650120705/1691340056/600x200',
- fullText: 'So you have many different #Selfhosted apps and you are having trouble organizing them? Fear not cause homarr is here is to save you the hassle.',
+ fullText:
+ 'So you have many different #Selfhosted apps and you are having trouble organizing them? Fear not cause homarr is here is to save you the hassle.',
link: 'https://twitter.com/SlhstdCorner/status/1698674826351685648',
},
];
@@ -70,22 +73,30 @@ export default function HomepageUserReviews() {
return (
Community
-
We have a big and active community, which
- regularly contributes new features & integrations to Homarr. Our community translation program and modularity
- end extendability in the code makes it easy to contribute and extend Homarr.
+
+ Join homarr's active community, which regularly contributes new features & integrations
+ to homarr. Our community translation program and developer guides make it easy to
+ contribute and extend the project in your own way.
+