diff --git a/package.json b/package.json
index efdaa03..b49e17e 100644
--- a/package.json
+++ b/package.json
@@ -18,7 +18,7 @@
"@emotion/styled": "^11.3.0",
"@mui/icons-material": "^5.0.1",
"@mui/material": "^5.0.2",
- "axios": "^0.21.4",
+ "axios": "^0.22.0",
"gatsby": "^3.14.1",
"gatsby-plugin-catch-links": "^3.14.0",
"gatsby-plugin-google-gtag": "^3.14.0",
diff --git a/src/images/Opal/Opal.png b/src/images/Opal/Opal.png
new file mode 100644
index 0000000..d4c97a4
Binary files /dev/null and b/src/images/Opal/Opal.png differ
diff --git a/src/images/Opal/opal_settings.png b/src/images/Opal/opal_settings.png
new file mode 100644
index 0000000..5becaf3
Binary files /dev/null and b/src/images/Opal/opal_settings.png differ
diff --git a/src/images/Opal/opal_timer.png b/src/images/Opal/opal_timer.png
new file mode 100644
index 0000000..6d2d3ff
Binary files /dev/null and b/src/images/Opal/opal_timer.png differ
diff --git a/src/markdown/blog/2021/10/03/opal-1.0.md b/src/markdown/blog/2021/10/03/opal-1.0.md
new file mode 100644
index 0000000..2884787
--- /dev/null
+++ b/src/markdown/blog/2021/10/03/opal-1.0.md
@@ -0,0 +1,29 @@
+---
+path: "/blog/2021/10/03/opal-1.0"
+title: "Opal 1.0 - Release"
+author: "CodeDead"
+date: "2021-10-03"
+abstract: "It's been a while since we released something new, but after lots of testing and development cycles, please welcome Opal into our software catalog..."
+categories: "Java, News"
+---
+## Information
+
+
+
+It's been a while since we released something new, but after lots of testing and development cycles, please welcome Opal into our software catalog!
+
+Opal is an application that is written in Java and uses JavaFX to display the user-interface and it is designed to play relaxing music for Windows, Linux and macOS users.
+For the initial release, you have access to 14 sounds, that you can play for however long you like.
+
+As always, Opal is a free and open-source application; meaning you don't have to pay us a single cent to download, run and use Opal.
+
+We hope you enjoy using Opal!
+
+## Download
+
+You can download the latest version of Opal by clicking on the following link:
+[Opal](https://codedead.com/software/opal)
+
+## Other
+
+Feel free to [contact us](/contact) if you have any questions or if you need help.
diff --git a/src/pages/index.jsx b/src/pages/index.jsx
index a8ee8c2..bcbde92 100644
--- a/src/pages/index.jsx
+++ b/src/pages/index.jsx
@@ -44,11 +44,11 @@ const Home = () => {
gatsbyImageData(layout: FULL_WIDTH)
}
},
- pkfinder: file(relativePath: { eq: "PK Finder/pkfinder.png" }) {
+ opal: file(relativePath: { eq: "Opal/Opal.png" }) {
childImageSharp {
gatsbyImageData(layout: FULL_WIDTH)
}
- }
+ }
}`);
const [, dispatch] = useContext(MainContext);
@@ -145,15 +145,15 @@ const Home = () => {
navigate('/software/pk-finder')}
+ onClick={() => navigate('/software/opal')}
>
-
+
{
- PK Finder
+ Opal
- Easily recover your Windows Product Key with PK Finder. As soon as you open
- PK Finder, you’ll be able to view your product key.
+ A free and open source music player that will help you relax. Opal has
+ 14 sounds available that will help you relax. It runs on Windows and Linux.
diff --git a/src/pages/software/index.jsx b/src/pages/software/index.jsx
index 0d14248..8f86e5c 100644
--- a/src/pages/software/index.jsx
+++ b/src/pages/software/index.jsx
@@ -62,6 +62,11 @@ const Software = () => {
gatsbyImageData(layout: CONSTRAINED, height: 160)
}
},
+ opal: file(relativePath: { eq: "Opal/Opal.png" }) {
+ childImageSharp {
+ gatsbyImageData(layout: CONSTRAINED, height: 160)
+ }
+ },
egld: file(relativePath: { eq: "Elrond/egld.png" }) {
childImageSharp {
gatsbyImageData(layout: CONSTRAINED, height: 160)
@@ -123,6 +128,12 @@ const Software = () => {
description: 'A simple and easy to use price calculator for Elrond (EGLD).',
tags: ['egld', 'elrond', 'currency', 'Crypto'],
image: imageData.egld.childImageSharp.gatsbyImageData,
+ }, {
+ name: 'Opal',
+ url: '/software/opal',
+ description: 'Opal is a free and open source music player that will help you relax. It runs on Windows and Linux.',
+ tags: ['Opal', 'music', 'relax', 'sound', 'relaxation', 'relaxing', 'linux'],
+ image: imageData.opal.childImageSharp.gatsbyImageData,
}];
useEffect(() => {
@@ -191,7 +202,7 @@ const Software = () => {
{/* eslint-disable-next-line no-nested-ternary */}
{searchResult && searchResult.length > 0 ? (
-
+
{searchResult}
) : searchValue && searchValue.length > 0 ? (
@@ -228,6 +239,14 @@ const Software = () => {
image={applications.filter((item) => item.name === 'Advanced PassGen')[0].image}
/>
+
+ item.name === 'Advanced PortChecker')[0].name}
+ description={applications.filter((item) => item.name === 'Advanced PortChecker')[0].description}
+ url={applications.filter((item) => item.name === 'Advanced PortChecker')[0].url}
+ image={applications.filter((item) => item.name === 'Advanced PortChecker')[0].image}
+ />
+
)}
@@ -270,6 +289,14 @@ const Software = () => {
image={applications.filter((item) => item.name === 'PK Finder')[0].image}
/>
+
+ item.name === 'DeadLock')[0].name}
+ description={applications.filter((item) => item.name === 'DeadLock')[0].description}
+ url={applications.filter((item) => item.name === 'DeadLock')[0].url}
+ image={applications.filter((item) => item.name === 'DeadLock')[0].image}
+ />
+
)}
@@ -294,18 +321,18 @@ const Software = () => {
item.name === 'Advanced PortChecker')[0].name}
- description={applications.filter((item) => item.name === 'Advanced PortChecker')[0].description}
- url={applications.filter((item) => item.name === 'Advanced PortChecker')[0].url}
- image={applications.filter((item) => item.name === 'Advanced PortChecker')[0].image}
+ name={applications.filter((item) => item.name === 'Opal')[0].name}
+ description={applications.filter((item) => item.name === 'Opal')[0].description}
+ url={applications.filter((item) => item.name === 'Opal')[0].url}
+ image={applications.filter((item) => item.name === 'Opal')[0].image}
/>
item.name === 'DeadLock')[0].name}
- description={applications.filter((item) => item.name === 'DeadLock')[0].description}
- url={applications.filter((item) => item.name === 'DeadLock')[0].url}
- image={applications.filter((item) => item.name === 'DeadLock')[0].image}
+ name={applications.filter((item) => item.name === 'AniView')[0].name}
+ description={applications.filter((item) => item.name === 'AniView')[0].description}
+ url={applications.filter((item) => item.name === 'AniView')[0].url}
+ image={applications.filter((item) => item.name === 'AniView')[0].image}
/>
@@ -316,14 +343,6 @@ const Software = () => {
image={applications.filter((item) => item.name === 'DeadPix')[0].image}
/>
-
- item.name === 'AniView')[0].name}
- description={applications.filter((item) => item.name === 'AniView')[0].description}
- url={applications.filter((item) => item.name === 'AniView')[0].url}
- image={applications.filter((item) => item.name === 'AniView')[0].image}
- />
- item.name === 'EGLD Price Calculator')[0].name}
diff --git a/src/pages/software/opal/index.jsx b/src/pages/software/opal/index.jsx
new file mode 100644
index 0000000..423eecf
--- /dev/null
+++ b/src/pages/software/opal/index.jsx
@@ -0,0 +1,257 @@
+import React, { useContext, useEffect } from 'react';
+import Grid from '@mui/material/Grid';
+import Typography from '@mui/material/Typography';
+import Divider from '@mui/material/Divider';
+import Container from '@mui/material/Container';
+import { GatsbyImage } from 'gatsby-plugin-image';
+import { graphql, useStaticQuery } from 'gatsby';
+import Button from '@mui/material/Button';
+import Card from '@mui/material/Card';
+import CardContent from '@mui/material/CardContent';
+import InfoIcon from '@mui/icons-material/Info';
+import GetAppIcon from '@mui/icons-material/GetApp';
+import PageHeader from '../../../components/PageHeader';
+import Layout from '../../../components/Layout';
+import { MainContext } from '../../../contexts/MainContextProvider';
+import { setPageIndex } from '../../../reducers/MainReducer/Actions';
+
+const OpalPage = () => {
+ const [, dispatch] = useContext(MainContext);
+ const data = useStaticQuery(graphql`
+ query {
+ opal: file(relativePath: { eq: "Opal/Opal.png" }) {
+ childImageSharp {
+ gatsbyImageData(layout: FULL_WIDTH)
+ }
+ },
+ opalSettings: file(relativePath: { eq: "Opal/opal_settings.png" }) {
+ childImageSharp {
+ gatsbyImageData(layout: FULL_WIDTH)
+ }
+ },
+ opalTimer: file(relativePath: { eq: "Opal/opal_timer.png" }) {
+ childImageSharp {
+ gatsbyImageData(layout: FULL_WIDTH)
+ }
+ }
+ }`);
+
+ useEffect(() => {
+ dispatch(setPageIndex(-1));
+ }, []);
+
+ return (
+
+
+
+
+
+
+
+ {' '}
+ General
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Simplicity
+
+
+ Select the sounds (14 relaxing tracks are available) that you want to hear,
+ turn them on and you can listen to and enjoy the music for as long as you
+ want, without interruption.
+
+
+ You can listen to the sound of:
+
+
Rain
+
Wind
+
Thunder
+
A river
+
Fire
+
Office background noises
+
And much much more
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Timer
+
+
+ You can enable a timer to turn off all music after a specified amount of time.
+ An incredibly useful feature for when you are about to fall asleep.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Cross platform
+
+
+ Opal is available for Linux and Windows and community builds for macOS are
+ also possible. All offering the same easy-to-use look and feel.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {' '}
+ Download
+
+
+
+
+
+
+
+
+
+ Windows
+
+
+
+
+
+
+ Linux
+
+
+
+
+
+
+
+
+ Extra
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
+
+export default OpalPage;
diff --git a/src/pages/software/opal/requirements/index.jsx b/src/pages/software/opal/requirements/index.jsx
new file mode 100644
index 0000000..c5860cf
--- /dev/null
+++ b/src/pages/software/opal/requirements/index.jsx
@@ -0,0 +1,133 @@
+import React, { useContext, useEffect } from 'react';
+import Table from '@mui/material/Table';
+import TableBody from '@mui/material/TableBody';
+import TableRow from '@mui/material/TableRow';
+import TableCell from '@mui/material/TableCell';
+import Container from '@mui/material/Container';
+import Grid from '@mui/material/Grid';
+import Typography from '@mui/material/Typography';
+import Divider from '@mui/material/Divider';
+import { Button, Card } from '@mui/material';
+import SecurityIcon from '@mui/icons-material/Security';
+import InfoIcon from '@mui/icons-material/Info';
+import CardContent from '@mui/material/CardContent';
+import TableContainer from '@mui/material/TableContainer';
+import PageHeader from '../../../../components/PageHeader';
+import Layout from '../../../../components/Layout';
+import { MainContext } from '../../../../contexts/MainContextProvider';
+import { setPageIndex } from '../../../../reducers/MainReducer/Actions';
+
+const Requirements = () => {
+ const [, dispatch] = useContext(MainContext);
+
+ useEffect(() => {
+ dispatch(setPageIndex(-1));
+ }, []);
+
+ return (
+
+
+
+
+
+
+
+ {' '}
+ General
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Operating System
+
+ Windows 7 and later (x64), GNU/Linux (x64)
+
+
+
+ Disk space
+
+ At least 100MB
+
+
+
+ Memory
+ At least 100MB free RAM memory
+
+
+ Internet connection
+
+ Required in order to check for updates. This can be turned off in the
+ settings menu
+
+
+
+