3 Commits

Author SHA1 Message Date
Dave Gallant
bea32bc3b2 Bump 2024-08-16 15:05:45 -04:00
Dave Gallant
0901010aff Fix lint issue 2024-08-16 15:01:35 -04:00
renovate[bot]
efd69575c3 Update dependency eslint to v9 2024-08-16 15:01:35 -04:00
15 changed files with 2706 additions and 3320 deletions

View File

@@ -1,8 +1,5 @@
rfd.davegallant.ca { rfd.fyi
file_server
reverse_proxy /api/* backend:8080
}
rfd.fyi { file_server
redir https://rfd.davegallant.ca{uri} 301
} reverse_proxy /api/* backend:8080

View File

@@ -1,4 +1,4 @@
FROM node:20.2.0-alpine3.16 as builder FROM node:20.2.0-alpine3.16 AS builder
WORKDIR /app WORKDIR /app
@@ -10,7 +10,7 @@ COPY . .
RUN npm run build RUN npm run build
FROM caddy:2.10.0-alpine as runtime FROM caddy:2.8.4-alpine AS runtime
WORKDIR /my-site WORKDIR /my-site

View File

@@ -1,9 +1,11 @@
# rfd-fyi # rfd.fyi
This repository provides a simple, less-distracting overlay for hot deals posted on https://forums.redflagdeals.com. This repository provides a simple, less-distracting overlay for hot deals posted on https://forums.redflagdeals.com.
The frontend is made with Vue 3 and the backend is written in Go. The backend exists for caching purposes; to prevent excessive requests to RedFlagDeals itself. The frontend is made with Vue 3 and the backend is written in Go. The backend exists for caching purposes; to prevent excessive requests to RedFlagDeals itself.
It is hosted at [rfd.fyi](https://rfd.fyi).
## Local Development ## Local Development
To get up and running locally: in one pane/tab, run: To get up and running locally: in one pane/tab, run:

View File

@@ -1,4 +1,4 @@
# syntax=docker/dockerfile:1.17 # syntax=docker/dockerfile:1.9
FROM cgr.dev/chainguard/go:latest as build FROM cgr.dev/chainguard/go:latest as build
WORKDIR /src WORKDIR /src

View File

@@ -91,15 +91,12 @@ func (a *App) refreshTopics() {
for { for {
log.Info().Msg("Refreshing topics") log.Info().Msg("Refreshing topics")
latestTopics := a.getDeals(9, 1, 6) latestTopics := a.getDeals(9, 1, 6)
latestTopics = a.updateScores(latestTopics)
if len(latestTopics) > 0 { log.Info().Msg("Refreshing redirects")
latestTopics = a.updateScores(latestTopics) latestRedirects := a.getRedirects()
a.Redirects = latestRedirects
log.Info().Msg("Refreshing redirects") a.CurrentTopics = a.stripRedirects(latestTopics)
latestRedirects := a.getRedirects()
a.Redirects = latestRedirects
a.CurrentTopics = a.stripRedirects(latestTopics)
}
a.LastRefresh = time.Now() a.LastRefresh = time.Now()
rand.Seed(time.Now().UnixNano()) rand.Seed(time.Now().UnixNano())

View File

@@ -3,10 +3,10 @@ module github.com/davegallant/rfd-fyi
go 1.18 go 1.18
require ( require (
github.com/dlclark/regexp2 v1.11.5 github.com/dlclark/regexp2 v1.11.4
github.com/gorilla/mux v1.8.1 github.com/gorilla/mux v1.8.1
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1
github.com/rs/zerolog v1.34.0 github.com/rs/zerolog v1.33.0
) )
require ( require (

View File

@@ -9,8 +9,6 @@ github.com/dlclark/regexp2 v1.11.2 h1:/u628IuisSTwri5/UKloiIsH8+qF2Pu7xEQX+yIKg6
github.com/dlclark/regexp2 v1.11.2/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.2/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo= github.com/dlclark/regexp2 v1.11.4 h1:rPYF9/LECdNymJufQKmri9gV604RvvABwgOA8un7yAo=
github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.4/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ=
github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
@@ -23,15 +21,12 @@ github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APP
github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg=
github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0=
github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A=
github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0= github.com/rs/zerolog v1.32.0 h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0=
github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/rs/zerolog v1.32.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8=
github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss=
github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY=
github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ=
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o= golang.org/x/sys v0.12.0 h1:CM0HF96J0hcLAwsHPJZjfdNzs0gftsLfgKt57wWHJ0o=

View File

@@ -1,3 +1,4 @@
version: "3.9"
services: services:
frontend: frontend:
image: ghcr.io/davegallant/rfd-fyi-frontend image: ghcr.io/davegallant/rfd-fyi-frontend

View File

@@ -1,3 +1,4 @@
version: "3.9"
services: services:
frontend: frontend:
build: build:

5937
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,7 +10,7 @@
"dependencies": { "dependencies": {
"@github/hotkey": "^3.0.0", "@github/hotkey": "^3.0.0",
"@popperjs/core": "^2.11.8", "@popperjs/core": "^2.11.8",
"axios": "^1.11.0", "axios": "^1.6.0",
"bootstrap": "^5.3.1", "bootstrap": "^5.3.1",
"bootstrap-vue": "^2.22.0", "bootstrap-vue": "^2.22.0",
"core-js": "^3.32.1", "core-js": "^3.32.1",
@@ -19,8 +19,9 @@
"moment": "^2.29.4", "moment": "^2.29.4",
"vue": "^3.3.4", "vue": "^3.3.4",
"vue-github-button": "^3.0.3", "vue-github-button": "^3.0.3",
"vue-gtag": "^2.0.1",
"vue-loading-overlay": "^6.0.3", "vue-loading-overlay": "^6.0.3",
"vue-router": "4.5.1" "vue-router": "4.4.3"
}, },
"devDependencies": { "devDependencies": {
"@babel/core": "^7.22.10", "@babel/core": "^7.22.10",
@@ -30,7 +31,7 @@
"@vue/cli-plugin-babel": "~5.0.0", "@vue/cli-plugin-babel": "~5.0.0",
"@vue/cli-plugin-eslint": "~5.0.0", "@vue/cli-plugin-eslint": "~5.0.0",
"@vue/cli-service": "^5.0.8", "@vue/cli-service": "^5.0.8",
"eslint": "^8.47.0", "eslint": "^9.0.0",
"eslint-plugin-vue": "^9.17.0", "eslint-plugin-vue": "^9.17.0",
"postcss-cli": "^11.0.0" "postcss-cli": "^11.0.0"
}, },

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -10,8 +10,7 @@
rel="stylesheet" rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200" href="https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined:opsz,wght,FILL,GRAD@20..48,100..700,0..1,-50..200"
/> />
<title>rfd-fyi - An overlay of hot deals</title> <title>rfd.fyi - An overlay of hot deals</title>
<script defer src="https://umami.snake-cloud.ts.net/script.js" data-website-id="59ffe8be-509a-471e-8cd6-a63c5b35b7aa"></script>
</head> </head>
<body> <body>
<noscript> <noscript>

View File

@@ -2,6 +2,7 @@
import axios from "axios"; import axios from "axios";
import moment from "moment"; import moment from "moment";
import Loading from "vue-loading-overlay"; import Loading from "vue-loading-overlay";
import GithubButton from "vue-github-button";
import { install } from "@github/hotkey"; import { install } from "@github/hotkey";
import "vue-loading-overlay/dist/css/index.css"; import "vue-loading-overlay/dist/css/index.css";
@@ -117,14 +118,10 @@ export default {
return v.replace(re, (matchedText) => `<mark>${matchedText}</mark>`); return v.replace(re, (matchedText) => `<mark>${matchedText}</mark>`);
}; };
}, },
showBeforeTargetDate() {
const now = new Date();
const target = new Date('2025-08-20T00:00:00');
return now < target;
}
}, },
components: { components: {
Loading, Loading,
GithubButton,
}, },
}; };
</script> </script>
@@ -209,9 +206,21 @@ export default {
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div v-if="showBeforeTargetDate"> <div v-if="!isMobile()">
<footer class="fixed-bottom"> <footer class="fixed-bottom">
PSA: <a href="https://rfd.fyi">rfd.fyi</a> will not be renewed after 2025-08-20. Please use <a href="https://rfd.davegallant.ca">rfd.davegallant.ca</a>. <small
>Press '/' to begin filtering (i.e.
<a
href="/#/filter=costco"
onclick="setTimeout(location.reload.bind(location), 1)"
>https://rfd.fyi/#/filter=costco</a
>)</small
>
<div class="footer-right">
<github-button href="https://github.com/davegallant/rfd-fyi"
>Star</github-button
>
</div>
</footer> </footer>
</div> </div>
</body> </body>
@@ -225,10 +234,4 @@ export default {
text-align: center; text-align: center;
color: #2c3e50; color: #2c3e50;
} }
.fixed-bottom {
background: #ffc;
color: black;
}
</style> </style>

View File

@@ -1,5 +1,6 @@
import { createApp } from "vue"; import { createApp } from "vue";
import App from "./App.vue"; import App from "./App.vue";
import VueGtag from "vue-gtag";
import { createRouter, createWebHashHistory } from "vue-router"; import { createRouter, createWebHashHistory } from "vue-router";
import "bootstrap/dist/css/bootstrap.min.css"; import "bootstrap/dist/css/bootstrap.min.css";
@@ -14,7 +15,9 @@ const router = createRouter({
routes, routes,
}); });
const app = createApp(App); const app = createApp(App).use(VueGtag, {
config: { id: "G-YF11ZH9SYD" },
});
app.use(router); app.use(router);
app.mount("#app"); app.mount("#app");