Skip to content
This repository was archived by the owner on Jan 25, 2026. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
190 commits
Select commit Hold shift + click to select a range
e52f8c7
fix: favicon
opdev1004 Apr 8, 2025
278a628
docs: add hardware requirement
opdev1004 Apr 8, 2025
c8be979
Merge pull request #155 from Redot-Engine/fix/favicon
charlottewiltshire0 Apr 8, 2025
f7023cf
feat: enhance CookieConsent component with accessibility improvements…
charlottewiltshire0 Apr 13, 2025
46a41cc
Merge pull request #159 from Redot-Engine/feature/cookie-consent-impr…
charlottewiltshire0 Apr 13, 2025
59a2198
feat: update translation.json with new download dialog strings and im…
charlottewiltshire0 Apr 27, 2025
07e9472
feat: refactor sanitizeInput to arrow function and add capitalizeFirs…
charlottewiltshire0 Apr 27, 2025
265eae4
feat: add DefaultNotFound component for improved 404 page experience
charlottewiltshire0 Apr 27, 2025
e1dfdbf
feat: add route handler for fetching GitHub release versions and assets
charlottewiltshire0 Apr 27, 2025
bcc3a08
feat: improve error handling and add authorization headers for GitHub…
charlottewiltshire0 Apr 27, 2025
d22e9f1
feat: add GITHUB_ACCESS_TOKEN to example environment configuration
charlottewiltshire0 Apr 27, 2025
c06dac6
feat: add @radix-ui/react-select and @radix-ui/react-tabs to dependen…
charlottewiltshire0 Apr 27, 2025
1a10e1a
feat: add Alert, AlertTitle, and AlertDescription components
charlottewiltshire0 Apr 27, 2025
cae2025
feat: add AnimatedButton component with customizable animation effects
charlottewiltshire0 Apr 27, 2025
6f45ce4
feat: add DownloadOverview component with animated sections and syste…
charlottewiltshire0 Apr 27, 2025
f5b6b40
feat: refactor constants
charlottewiltshire0 Apr 27, 2025
a215467
feat: refactor DownloadThreeSteps component and rename ThreeStepsItem…
charlottewiltshire0 Apr 27, 2025
76431e2
feat: add ArchiveVersionSelector component and integrate it into Down…
charlottewiltshire0 Apr 27, 2025
33c8152
feat: add Select and Tabs components
charlottewiltshire0 Apr 27, 2025
70b0f05
feat: refactor DownloadSupportedPlatform component and add PlatformIt…
charlottewiltshire0 Apr 27, 2025
ca7acb6
feat: add optional id prop to SectionHeader component for improved ac…
charlottewiltshire0 Apr 27, 2025
7529f42
feat: replace DownloadInformation with DownloadOverview and add platf…
charlottewiltshire0 Apr 27, 2025
90be6a9
feat: add MotionSection component for animated section visibility
charlottewiltshire0 Apr 27, 2025
00d3367
feat: add GlowingEffect component for interactive visual feedback
charlottewiltshire0 Apr 27, 2025
99f1193
feat: add animation variants for section and item visibility
charlottewiltshire0 Apr 27, 2025
a4d1e3b
feat: refactor DownloadHero component for improved architecture detec…
charlottewiltshire0 Apr 27, 2025
68fbed5
feat: require channel parameter in route validation for improved erro…
charlottewiltshire0 Apr 27, 2025
cea77a0
feat: set runtime to edge for improved performance
charlottewiltshire0 Apr 27, 2025
6b323b9
feat: refactor LanguageSwitcher to use hooks and replace button with …
charlottewiltshire0 Apr 27, 2025
73391f8
Merge pull request #164 from Redot-Engine/feature/download-page-impro…
charlottewiltshire0 Apr 27, 2025
8337b66
Merge pull request #171 from Redot-Engine/fix/language-switcher-focus
charlottewiltshire0 Apr 27, 2025
f8e9fa0
feat: update project name and version in package.json
charlottewiltshire0 Apr 27, 2025
598bf87
feat: add contact page link to SECURITY.md
charlottewiltshire0 Apr 27, 2025
d019a20
feat: enhance README with logo, project description, and technology s…
charlottewiltshire0 Apr 27, 2025
328ae04
feat: remove pnpm-lock.yaml
charlottewiltshire0 Apr 28, 2025
303fa77
feat: the logo link points to an external template repository (othnei…
charlottewiltshire0 Apr 28, 2025
36e236c
feat: use markdown link syntax for consistency with other links in th…
charlottewiltshire0 Apr 28, 2025
c62a293
refactor: simplify dynamic imports in page.tsx
charlottewiltshire0 Apr 28, 2025
72210a0
Merge pull request #174 from Redot-Engine/fix/internal-server-error-i…
charlottewiltshire0 Apr 28, 2025
28aa23b
Merge pull request #173 from Redot-Engine/feat/bump-version
charlottewiltshire0 Apr 28, 2025
4c3614d
feat: add constant naming conventions to CONTRIBUTING.md
charlottewiltshire0 May 10, 2025
3a8d08a
feat: refactor OS detection logic to use user agent instead of browse…
charlottewiltshire0 May 10, 2025
af39de7
feat: enhance loading state with spinner icon in TextFetcher component
charlottewiltshire0 May 10, 2025
5537f33
refactor: move components to shared directory for reusability
charlottewiltshire0 May 10, 2025
abe3a75
refactor: simplify translation logic and update styling classes
charlottewiltshire0 May 10, 2025
f009326
refactor: update sitemap generation logic and improve priority settings
charlottewiltshire0 May 10, 2025
6791f93
fix: update sitemap URL generation to use dynamic base URL
charlottewiltshire0 May 10, 2025
1c751f6
feat: remove beta programs section and add theme toggle options in tr…
charlottewiltshire0 May 10, 2025
51fb88a
feat: integrate bundle analyzer and remove unused CSP header
charlottewiltshire0 May 10, 2025
109feaa
feat: update .gitignore to include package and IDE specific files
charlottewiltshire0 May 10, 2025
73afc63
feat: add cookie consent management actions
charlottewiltshire0 May 10, 2025
de87191
fix: use nullish coalescing for API version fallback
charlottewiltshire0 May 10, 2025
57898e3
fix: adjust skeleton height in LicenseContent component
charlottewiltshire0 May 10, 2025
50f1a11
feat: add ANALYZE variable to example environment file
charlottewiltshire0 May 10, 2025
b5bab9b
feat: add analyze script and bundle analyzer dependency to package.json
charlottewiltshire0 May 10, 2025
409d6c6
feat: refactor settings management and update layout handling in Appe…
charlottewiltshire0 May 10, 2025
9c22461
feat: update base URL handling and enhance metadata descriptions in l…
charlottewiltshire0 May 10, 2025
86e640e
feat: update import path for DefaultNotFound component
charlottewiltshire0 May 10, 2025
518da2d
refactor: restructure footer constants and improve link handling
charlottewiltshire0 May 10, 2025
4e9ed17
refactor: update import paths and restructure component data handling
charlottewiltshire0 May 10, 2025
fac5883
fix: use nullish coalescing for search and selectedTag state initiali…
charlottewiltshire0 May 10, 2025
fbca0d7
feat: add cardVariants for animation states in animations.ts
charlottewiltshire0 May 10, 2025
d3b3203
feat: add SharedNavLink component for reusable navigation links
charlottewiltshire0 May 10, 2025
a4e1642
feat: enhance language cookie handling with consent check
charlottewiltshire0 May 10, 2025
13c72c3
feat: update image
charlottewiltshire0 May 10, 2025
a12eaa0
refactor: update import paths for constants and components
charlottewiltshire0 May 10, 2025
0d8f85f
refactor: move Lenis component to layout directory with updated options
charlottewiltshire0 May 10, 2025
3294946
refactor: move MobileSidebar to layout directory and update components
charlottewiltshire0 May 10, 2025
6af55f1
refactor: move ModeToggle to layout directory and update components
charlottewiltshire0 May 10, 2025
48d81e5
feat: add SectionHero component for reusable hero sections
charlottewiltshire0 May 10, 2025
c2335f9
chore: remove unused cookie settings layout file
charlottewiltshire0 May 10, 2025
0e53efc
refactor: move LanguageSwitcher to components/layout and update langu…
charlottewiltshire0 May 10, 2025
9c3b69f
refactor: rename platformDownloadLink.ts to platform-download-link.ts
charlottewiltshire0 May 10, 2025
6305bfc
feat: add LatestBanner component to display the latest banner with SW…
charlottewiltshire0 May 11, 2025
71b98ac
feat: add bannerType to schema for banner data integration
charlottewiltshire0 May 11, 2025
42934dc
refactor: clean up .gitignore by removing unnecessary entries
charlottewiltshire0 May 12, 2025
ec4af8f
feat: add cookie max age constants for better maintainability
charlottewiltshire0 May 12, 2025
05629dd
feat: enhance settings type definitions and improve cookie options st…
charlottewiltshire0 May 12, 2025
ea4675a
refactor: rename Languages interface to Language for clarity
charlottewiltshire0 May 12, 2025
fd5d4fd
feat: update social links structure with unique IDs and improved icon…
charlottewiltshire0 May 12, 2025
36c47ea
fix: correct typos in translation.json for improved clarity
charlottewiltshire0 May 12, 2025
a0b113f
fix: set default blog layout to "new" if not specified in settings
charlottewiltshire0 May 12, 2025
df46829
fix: use nullish coalescing operator for default values in bannerType…
charlottewiltshire0 May 12, 2025
d453f97
Merge pull request #184 from Redot-Engine/refactor/project-structure
charlottewiltshire0 May 12, 2025
0024805
refactor: simplify animation properties and enhance ContactCard layou…
charlottewiltshire0 May 12, 2025
a9cf221
refactor: remove unnecessary class
charlottewiltshire0 May 12, 2025
9005ea6
Merge pull request #185 from Redot-Engine/feature/contact-improvements
charlottewiltshire0 May 12, 2025
6409364
refactor: enhance CommunityCard layout and improve animation transitions
charlottewiltshire0 May 15, 2025
ab86d00
feat: add CommunitySection component and lazy load images in Communit…
charlottewiltshire0 May 15, 2025
98a105e
Merge pull request #188 from Redot-Engine/feature/community-improvements
charlottewiltshire0 May 15, 2025
efa2713
refactor: simplify Link component in Banner by removing unnecessary a…
charlottewiltshire0 May 15, 2025
18caa42
Merge pull request #195 from Redot-Engine/feature/banner-fix
charlottewiltshire0 May 19, 2025
14b7974
feat: add BrandColors component with color swatches and clipboard fun…
charlottewiltshire0 May 20, 2025
e104ff9
feat: add BrandLogo and LogoVariation components with glowing effect …
charlottewiltshire0 May 20, 2025
3fb903a
feat: add BrandSymbol component to display logo variations with anima…
charlottewiltshire0 May 20, 2025
80ebd03
feat: add new logo and symbol SVG files for branding
charlottewiltshire0 May 20, 2025
e0496b2
feat: enhance SectionHero component with customizable className prop
charlottewiltshire0 May 20, 2025
8d54ce1
feat: add comprehensive brand guidelines and translations for multipl…
charlottewiltshire0 May 20, 2025
78f264a
feat: create layout and branding pages with brand components and meta…
charlottewiltshire0 May 20, 2025
ef02932
feat: add branding links and logo/symbol variations for enhanced bran…
charlottewiltshire0 May 20, 2025
9780c08
feat: add BrandClearspace component for logo and symbol clearspace re…
charlottewiltshire0 May 20, 2025
8a04b9c
feat: add BrandLegalGuidelines component for displaying brand legal i…
charlottewiltshire0 May 20, 2025
5d01d1f
feat: add brand legal guidelines components (attribution, contact inf…
charlottewiltshire0 May 20, 2025
5c671ca
chore: update commitlint dependencies to latest versions
charlottewiltshire0 May 20, 2025
6a86e76
chore: update react and react-dom to version 19.1.0
charlottewiltshire0 May 20, 2025
f89f6b5
fix: update translations for brand guidelines and legal information
charlottewiltshire0 May 20, 2025
0e788ea
fix: improve clipboard timeout handling and add aria-label for logo d…
charlottewiltshire0 May 20, 2025
3ade9a7
Merge pull request #202 from Redot-Engine/feature/branding-page
charlottewiltshire0 May 20, 2025
112acfc
feat: add changelog localization entries
charlottewiltshire0 Jun 11, 2025
81793d7
feat: add sidebar, tooltip, checkbox, and badge component
charlottewiltshire0 Jun 11, 2025
87f6b85
refactor: rename hook and update references for consistent casing
charlottewiltshire0 Jun 11, 2025
24bbc55
feat: add useIsMobile hook
charlottewiltshire0 Jun 11, 2025
337ec09
feat: add useScrollVisibility hook
charlottewiltshire0 Jun 11, 2025
e408055
feat: add generateHeadingId utility
charlottewiltshire0 Jun 11, 2025
a2802ce
feat: add platform schema and fetch utility
charlottewiltshire0 Jun 11, 2025
590196c
feat: add changelog schema and fetch utility
charlottewiltshire0 Jun 11, 2025
424ab08
feat: add reusable blockContent schema for rich text, images, and cod…
charlottewiltshire0 Jun 11, 2025
7bd1f72
feat: add PortableText component for rich text rendering
charlottewiltshire0 Jun 11, 2025
66a4b24
chore: update dependencies for UI and syntax highlighting
charlottewiltshire0 Jun 11, 2025
9e08aee
chore: add custom sidebar color palette to Tailwind config
charlottewiltshire0 Jun 11, 2025
408ac09
feat: add ChangelogSidebar component with platform filter UI
charlottewiltshire0 Jun 11, 2025
3eaa1ff
feat: add ChangelogDetail component to display detailed changelog entry
charlottewiltshire0 Jun 11, 2025
ee24efb
feat: add ChangelogEntryCard component to display changelog summary c…
charlottewiltshire0 Jun 11, 2025
13b93cf
feat: add ChangelogList component to render list of changelog entries
charlottewiltshire0 Jun 11, 2025
e6d206f
feat: add ChangelogTableOfContents component with scroll spy and smoo…
charlottewiltshire0 Jun 11, 2025
019b7da
chore: add platform, changelog, and blockContent schema types to Sani…
charlottewiltshire0 Jun 11, 2025
d21b5ca
fix: correct hook import and naming in Hero component
charlottewiltshire0 Jun 11, 2025
ac34364
feat: add basic layout and metadata for changelog section
charlottewiltshire0 Jun 11, 2025
9dd0687
feat: add changelog listing and entry detail pages with TOC
charlottewiltshire0 Jun 11, 2025
22d63a0
feat: add useChangelogData hook for fetching and filtering changelogs
charlottewiltshire0 Jun 11, 2025
24eac1b
chore: clean up config and add codeInput plugin
charlottewiltshire0 Jun 11, 2025
570f302
fix(utils): improve heading ID generation for better URL compatibility
charlottewiltshire0 Jun 11, 2025
fb83a9f
refactor(hooks): optimize `useChangelogData` with useMemo and loading…
charlottewiltshire0 Jun 11, 2025
eab2df6
feat: add changelog link to footer and translations
charlottewiltshire0 Jun 11, 2025
4ab9165
feat: add loading skeleton to Changelog page
charlottewiltshire0 Jun 11, 2025
105607a
fix: correct date formatting in changelog preview
charlottewiltshire0 Jun 11, 2025
dc86cde
fix: remove null/undefined check for platforms in ChangelogSidebar
charlottewiltshire0 Jun 11, 2025
0db56c2
fix: use nullish
charlottewiltshire0 Jun 11, 2025
7a8a385
Merge pull request #212 from Redot-Engine/feature/changelog
charlottewiltshire0 Jun 11, 2025
b1a16f7
refactor: standardize OS hook and platform mapping
charlottewiltshire0 Jun 25, 2025
8abccfd
fix: update platform validation to use Object.keys for PLATFORM_MAPPING
charlottewiltshire0 Jun 25, 2025
a208da5
Merge pull request #218 from Redot-Engine/fix/download
charlottewiltshire0 Jun 25, 2025
25c7f1d
feat: add donation button to header and update translations
charlottewiltshire0 Jun 28, 2025
4d59676
fix: update background color for logo and symbol to bg-white
charlottewiltshire0 Jun 28, 2025
385b8d1
Merge pull request #221 from Redot-Engine/feature/donate
charlottewiltshire0 Jun 30, 2025
535e4a2
Merge pull request #222 from Redot-Engine/fix/press-kit-theme
charlottewiltshire0 Jun 30, 2025
8e41e28
feat: enhance blog localization
charlottewiltshire0 Jul 5, 2025
4b26bb4
feat: add language filter support for blog localization
charlottewiltshire0 Jul 5, 2025
0598e4b
feat: create font module and refactor layout to use new font imports
charlottewiltshire0 Jul 5, 2025
c12cad1
feat: add SANITY_LANGUAGES constant and set default language
charlottewiltshire0 Jul 5, 2025
98bf3ec
refactor: remove old article splash components and introduce new Post…
charlottewiltshire0 Jul 5, 2025
243b2f0
feat: enhance 404 Not Found page with metadata and new mascot image c…
charlottewiltshire0 Jul 5, 2025
79f7ed9
feat: update page.tsx to set runtime to nodejs and remove outdated co…
charlottewiltshire0 Jul 5, 2025
79a980f
feat: add GoToTop component
charlottewiltshire0 Jul 5, 2025
345efe6
feat: enhance RSS feed generation with improved error handling and st…
charlottewiltshire0 Jul 5, 2025
5a1b2c7
feat: add BlogRandomQuote component to display random quotes
charlottewiltshire0 Jul 5, 2025
0937a68
feat: update post and tag schema to include new fields and improve co…
charlottewiltshire0 Jul 5, 2025
b93f98d
feat: introduce BlogHero component to replace LatestBlogHero
charlottewiltshire0 Jul 5, 2025
ba8d1c6
refactor: remove unused sanitizeInput function from utils
charlottewiltshire0 Jul 5, 2025
68cc1a5
feat: enhance blog functionality
charlottewiltshire0 Jul 5, 2025
46d759b
feat: add useDebounce hook for improved value debouncing
charlottewiltshire0 Jul 5, 2025
c60079a
feat: update Badge and Button components with improved styling and st…
charlottewiltshire0 Jul 5, 2025
ff77a11
feat: add BlogVelocityScroll and VelocityScroll components
charlottewiltshire0 Jul 5, 2025
0efcfdd
feat: implement useBlogFilters hook for managing blog post filtering,…
charlottewiltshire0 Jul 5, 2025
8566b5f
refactor: replace ArticleContent component with PostContentLegacy
charlottewiltshire0 Jul 5, 2025
34f77c9
feat: replace ArticleCard with BlogPostCard component
charlottewiltshire0 Jul 5, 2025
4c2fca5
feat: update blog post URL structure and replace ArticleCard with Blo…
charlottewiltshire0 Jul 5, 2025
f10a0a8
chore: remove Tag component from blog
charlottewiltshire0 Jul 5, 2025
c4f2f24
feat: add AuthorAvatar component
charlottewiltshire0 Jul 5, 2025
ec72635
feat: add BlogEmptyState and BlogPostGrid components
charlottewiltshire0 Jul 5, 2025
12f2dda
feat: add BlogFilters component for tag selection and search function…
charlottewiltshire0 Jul 5, 2025
68c1838
refactor: simplify BlogClient component by integrating BlogFilters an…
charlottewiltshire0 Jul 5, 2025
d14b721
fix: use nullish coalescing operator
charlottewiltshire0 Jul 5, 2025
107157b
refactor: enhance Blog and BlogPost components for improved tag handl…
charlottewiltshire0 Jul 5, 2025
4e35ccd
refactor: rename Article component to BlogPost
charlottewiltshire0 Jul 5, 2025
b67f0ee
refactor: improve XSS pattern matching in sanitize function
charlottewiltshire0 Jul 6, 2025
d333082
refactor: refine XSS pattern matching in sanitize function to limit c…
charlottewiltshire0 Jul 6, 2025
dc7287e
fix: correct spelling errors in Greek and Norwegian translations
charlottewiltshire0 Jul 6, 2025
f154a9c
refactor: introduce SanityLanguage interface and update SANITY_LANGUA…
charlottewiltshire0 Jul 6, 2025
23a63a5
feat: integrate internationalization for 'Read more' button in BlogRa…
charlottewiltshire0 Jul 6, 2025
fe3da26
refactor: optimize scroll event handling in GoToTop component using r…
charlottewiltshire0 Jul 6, 2025
f3264e8
fix: update post URL generation to include 'blog' path and encode slug
charlottewiltshire0 Jul 6, 2025
8ebaf7a
refactor: move metadata for 'Post Not Found' page from component to p…
charlottewiltshire0 Jul 6, 2025
a59ff60
refactor: update StudioPage to use force-static dynamic rendering and…
charlottewiltshire0 Jul 6, 2025
512c99c
refactor: update BlogPostCard and PostSplashLegacy components
charlottewiltshire0 Jul 6, 2025
6514e5c
fix: ensure non-negative delay in useDebounce hook
charlottewiltshire0 Jul 6, 2025
3c29835
Merge pull request #226 from Redot-Engine/feature/blog-update
charlottewiltshire0 Jul 6, 2025
f10b567
feat: branch resolved
charlottewiltshire0 Jul 6, 2025
e30f6f1
feat: branch resolved
charlottewiltshire0 Jul 6, 2025
595b18d
refactor: remove edge runtime declaration from NotFound and route files
charlottewiltshire0 Jul 6, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .example.env
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
NEXT_PUBLIC_GTM_ID=
NEXT_PUBLIC_SANITY_DATASET=
NEXT_PUBLIC_SANITY_PROJECT_ID=
NEXT_PUBLIC_BASE_URL=
NEXT_PUBLIC_BASE_URL=
GITHUB_ACCESS_TOKEN=
ANALYZE=
Binary file added .github/assets/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@
!.yarn/plugins
!.yarn/releases
!.yarn/versions
package-lock.json
yarn.lock

# testing
/coverage
Expand All @@ -24,10 +26,12 @@
.DS_Store
*.pem

# debug
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
.pnpm-debug.log*

# env files (can opt-in for committing if needed)
.env*
Expand All @@ -39,5 +43,11 @@ yarn-error.log*
*.tsbuildinfo
next-env.d.ts

# IDE environments
.vscode
.idea
.open-next
.vimrc
.nanorc
.stackblitzrc
sandbox.config.json
9 changes: 0 additions & 9 deletions .husky/pre-commit
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,6 @@ if [ $? -ne 0 ]; then
exit 1
fi

# Stage changes made by Prettier
echo "📂 Staging formatting changes..."
git add .

# Ensure there are staged changes before proceeding
if git diff --cached --quiet; then
echo "❌ No changes to commit."
exit 1
fi

echo "✅ All pre-commit checks passed! 🎉"
exit 0
26 changes: 26 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,32 @@ feature/#1-init

- https://gist.github.com/seunggabi/87f8c722d35cd07deb3f649d45a31082

### Constant Naming

We follow specific patterns for naming constants based on their structure and usage:

#### Interface Names

- Use PascalCase
- Descriptive of the data structure
- Example: `HeaderLink`, `SettingsSidebarItem`, `Footer`

#### Constant Arrays/Objects

- Use UPPER_SNAKE_CASE for global constants
- Use camelCase for exported object instances
- Examples:

```typescript
// Global constants
export const SETTINGS_SIDEBAR_ITEMS: SettingsSidebarItem[];
export const LINKS: Record<string, string>;

// Object instances
export const header: HeaderLink[];
export const footer: Footer[];
```

## Development Environmental Variables

Place .env file in the root of project. File content:
Expand Down
42 changes: 38 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,35 @@
![Commit Activity](https://img.shields.io/github/commit-activity/m/Redot-Engine/redot-website?color=FFA726&label=commits&style=for-the-badge)
![Last Commit](https://img.shields.io/github/last-commit/Redot-Engine/redot-website?color=FFA726&label=last%20commit&style=for-the-badge)

<br />
<div align="center">
<a href="https://github.com/Redot-Engine/redot-website">
<img src=".github/assets/logo.png" alt="Logo" width="60" height="60">
</a>
<h1 align="center">Redot Website</h1>
<p align="center">
This is the official website for the <strong>Redot Engine</strong>, providing information, resources, and updates about the engine.
<br />
<a href="https://github.com/Redot-Engine/redot-website/issues/new?template=bug_report.yml">Report Bug</a>
&middot;
<a href="https://github.com/Redot-Engine/redot-website/issues/new?template=feature_request.yml">Request Feature</a>
</p>
</div>

<h1 align="center">Redot Engine Website</h1>
## Built With

This is the official website for the **Redot Engine**, providing information, resources, and updates about the engine.
This project leverages a variety of modern web frameworks and libraries to deliver a robust and flexible website. Below are the primary technologies used:

</div>
- [![Next][Next.js]][Next-url]
- [![React][React.js]][React-url]
- [![TailwindCSS][TailwindCSS]][TailwindCSS-url]
- [![Sanity][Sanity]][Sanity-url]
- [![FramerMotion][FramerMotion]][FramerMotion-url]

## Build from source

Bun, Node.js, Deno and others can be used, but we are using Bun.

### Install Bun

Bun is a fast JavaScript runtime like Node.js, but with a built-in package manager. If you haven't installed it yet, you can do so by running:
Expand All @@ -40,7 +59,7 @@ cd redot-website
bun install
```

### Read CONTRIBUTING.md and Setting up .env for development
## Read CONTRIBUTING.md and Setting up .env for development

Please read [CONTRIBUTING.md](CONTRIBUTING.md) before you start your contribution development.

Expand All @@ -60,6 +79,10 @@ Build the Next.js application for production using the following command:
bun build
```

## Hardware Requirement

Unfortunately this project does not work with old hardwares. We recommend to use recent hardware.

## Contributors

<a href="https://github.com/Redot-Engine/redot-website/graphs/contributors">
Expand All @@ -69,3 +92,14 @@ bun build
## License

The Redot Engine Website is licensed under the [MIT License](LICENSE).

[Next.js]: https://img.shields.io/badge/next.js-000000?style=for-the-badge&logo=nextdotjs&logoColor=white
[Next-url]: https://nextjs.org/
[React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB
[React-url]: https://reactjs.org/
[TailwindCSS]: https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge&logo=tailwind-css&logoColor=white
[TailwindCSS-url]: https://tailwindcss.com/
[Sanity]: https://img.shields.io/badge/Sanity-FF1943?style=for-the-badge&logo=sanity&logoColor=white
[Sanity-url]: https://www.sanity.io/
[FramerMotion]: https://img.shields.io/badge/Framer%20Motion-0055FF?style=for-the-badge&logo=framer&logoColor=white
[FramerMotion-url]: https://www.framer.com/motion/
2 changes: 2 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ If you find any security-related vulnerabilities, please let us know through one
- Open an issue directly (ensure sensitive information, such as site details and the actual project, is hidden).
- Contact us via our [Discord server](https://discord.gg/redot).

Also, you can find ways to contact us on our [contact page](https://www.redotengine.org/contact).

Thank you for your cooperation!
20 changes: 20 additions & 0 deletions actions/cookieConsent.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
"use server";

import { cookies } from "next/headers";
import { COOKIE_CONSENT_MAX_AGE } from "@/constants/common/cookie";

export async function setCookieConsent() {
const cookieStore = await cookies();
cookieStore.set({
name: "cookieConsent",
value: "true",
path: "/",
maxAge: COOKIE_CONSENT_MAX_AGE,
sameSite: "lax",
});
}

export async function getCookieConsent(): Promise<string | undefined> {
const cookieStore = await cookies();
return cookieStore.get("cookieConsent")?.value;
}
18 changes: 16 additions & 2 deletions actions/language.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
"use server";

import { cookies } from "next/headers";
import { getCookieConsent } from "@/actions/cookieConsent";
import { COOKIE_CONSENT_MAX_AGE } from "@/constants/common/cookie";

export async function setLanguage(value: string) {
const consent = (await getCookieConsent()) === "true";
const cookieStore = await cookies();
cookieStore.set("locale", value);
if (consent) {
cookieStore.set("locale", value, {
maxAge: COOKIE_CONSENT_MAX_AGE,
path: "/",
sameSite: "lax",
});
} else {
cookieStore.set("locale", value, {
path: "/",
sameSite: "lax",
});
}
}

export async function getLanguage() {
const cookieStore = await cookies();
return cookieStore.get("locale")?.value || "en";
return cookieStore.get("locale")?.value ?? "en";
}
45 changes: 39 additions & 6 deletions actions/settings.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,52 @@
"use server";

import { cookies } from "next/headers";
import { getCookieConsent } from "@/actions/cookieConsent";
import { SETTINGS_COOKIE_MAX_AGE } from "@/constants/common/cookie";

export async function saveSettingsBlogLayout(layout: string) {
type Settings = {
blogLayout: string;
};

type CookieOptions = {
httpOnly: boolean;
secure: boolean;
sameSite: "strict" | "lax" | "none";
path: string;
maxAge?: number;
};

const SETTINGS_COOKIE = "settings";
const DEFAULT_SETTINGS: Settings = {
blogLayout: "new",
};

export async function saveSettings(
newSettings: Partial<typeof DEFAULT_SETTINGS>
) {
const consent = (await getCookieConsent()) === "true";
const cookieStore = await cookies();
cookieStore.set("blogLayout", layout, {
const current = await getSettings();
const updated = { ...current, ...newSettings };
const cookieOptions: CookieOptions = {
httpOnly: true,
secure: process.env.NODE_ENV === "production",
sameSite: "strict",
maxAge: 60 * 60 * 24 * 30,
path: "/",
});
};
if (consent) {
cookieOptions.maxAge = SETTINGS_COOKIE_MAX_AGE;
}
cookieStore.set(SETTINGS_COOKIE, JSON.stringify(updated), cookieOptions);
}

export async function getSettingsBlogLayout() {
export async function getSettings(): Promise<typeof DEFAULT_SETTINGS> {
const cookieStore = await cookies();
return cookieStore.get("blogLayout")?.value || "new";
const raw = cookieStore.get(SETTINGS_COOKIE)?.value;
if (!raw) return { ...DEFAULT_SETTINGS };
try {
return { ...DEFAULT_SETTINGS, ...JSON.parse(raw) };
} catch {
return { ...DEFAULT_SETTINGS };
}
}
19 changes: 3 additions & 16 deletions app/(admin)/studio/[[...tool]]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,22 +1,9 @@
/**
* This route is responsible for the built-in authoring environment using Sanity Studio.
* All routes under your studio path is handled by this file using Next.js' catch-all routes:
* https://nextjs.org/docs/routing/dynamic-routes#catch-all-routes
*
* You can learn more about the next-sanity package here:
* https://github.com/sanity-io/next-sanity
*/

import { NextStudio } from "next-sanity/studio";
import config from "../../../../sanity.config";
import { Metadata } from "next";

export const metadata: Metadata = {
robots: {
index: false,
follow: true,
},
};
export const dynamic = "force-static";

export { metadata, viewport } from "next-sanity/studio";

export default function StudioPage() {
return <NextStudio config={config} />;
Expand Down
51 changes: 32 additions & 19 deletions app/(main)/blog/[slug]/not-found.tsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,48 @@
"use client";

import Image from "next/image";
import { Button } from "@/components/ui/button";
import Link from "next/link";
import { useTranslations } from "next-intl";
import { MascotImage } from "@/components/shared/MascotImage";
import { useRouter } from "next/navigation";
import { IconArrowLeft } from "@tabler/icons-react";

export default function NotFound() {
const t = useTranslations("articleNotFound");
const router = useRouter();
const t = useTranslations("blog.notFound");

return (
<section className="flex min-h-screen flex-col">
<div className="flex-grow overflow-x-clip bg-gradient-to-b from-[#ffffff] to-[#FFD2D2] py-32 dark:from-background dark:to-[#9F1E1E]/20">
<div className="mx-auto max-w-[540px]">
<div className="flex flex-col items-center justify-center gap-4">
<Image
src="https://image.redotengine.org/redotchan.png"
alt="Redotchan"
width={160}
height={160}
/>
<div className="flex flex-col">
<h2 className="mt-5 text-center text-4xl font-bold tracking-tighter md:text-[54px] md:leading-[60px]">
{t("title")}
</h2>
<p className="mt-5 text-center text-xl tracking-tighter text-muted-foreground md:text-[22px] md:leading-[30px]">
{t("description")}
</p>
<div className="flex flex-col items-center justify-center gap-6">
<MascotImage />
<div className="flex flex-col items-center justify-center gap-4">
<div className="space-y-2">
<h2 className="text-center text-4xl font-bold tracking-tighter md:text-[54px] md:leading-[60px]">
{t("title")}
</h2>
<p className="text-center text-xl tracking-tighter text-muted-foreground md:text-[22px] md:leading-[30px]">
{t("description")}
</p>
</div>
</div>
<div className="flex w-full flex-col gap-3 sm:w-auto sm:flex-row">
<Button
size="lg"
variant="outline"
onClick={() => router.back()}
asChild
>
<Link href="#" onClick={() => router.back()}>
<IconArrowLeft />
{t("goBack")}
</Link>
</Button>
<Button size="lg" asChild>
<Link href="/">{t("goHome")}</Link>
</Button>
</div>
<Button asChild>
<Link href="/blog">{t("backButton")}</Link>
</Button>
</div>
</div>
</div>
Expand Down
Loading