From 995babb426413695324f6d8dbf08bb396c36e7ee Mon Sep 17 00:00:00 2001 From: Nevo David Date: Tue, 29 Jul 2025 13:26:42 +0700 Subject: [PATCH] feat: move to nginx, remove inter fonts --- Dockerfile.dev | 20 +++---- .../backend/src/services/auth/auth.service.ts | 2 +- .../src/app/(app)/(preview)/p/[id]/layout.tsx | 1 + apps/frontend/src/app/(app)/auth/page.tsx | 2 +- apps/frontend/src/app/(app)/layout.tsx | 13 ++--- apps/frontend/src/app/(extension)/layout.tsx | 16 +++--- .../analytics/stars.table.component.tsx | 4 +- apps/frontend/src/components/auth/login.tsx | 3 +- .../src/components/auth/login.with.oidc.tsx | 3 +- .../auth/providers/farcaster.provider.tsx | 3 +- .../auth/providers/github.provider.tsx | 3 +- .../auth/providers/google.provider.tsx | 3 +- .../auth/providers/oauth.provider.tsx | 3 +- .../placeholder/wallet.ui.provider.tsx | 3 +- .../frontend/src/components/auth/register.tsx | 5 +- .../src/components/autopost/autopost.tsx | 3 +- .../src/components/billing/faq.component.tsx | 5 +- .../billing/main.billing.component.tsx | 19 ++----- .../launches/comments/comment.component.tsx | 5 +- .../launches/general.preview.component.tsx | 6 +-- .../src/components/launches/menu/menu.tsx | 3 +- .../web3/providers/telegram.provider.tsx | 3 +- .../src/components/marketplace/buyer.tsx | 4 -- .../src/components/messages/messages.tsx | 2 - .../new-launch/providers/devto/devto.tags.tsx | 3 +- .../providers/hashnode/hashnode.tags.tsx | 4 +- .../providers/instagram/instagram.tags.tsx | 3 +- .../providers/medium/medium.tags.tsx | 3 +- .../providers/reddit/reddit.provider.tsx | 3 +- .../new-layout/layout.component.tsx | 2 - .../notifications/notification.component.tsx | 5 +- .../components/settings/github.component.tsx | 7 ++- .../components/settings/teams.component.tsx | 3 +- .../third-parties/third-party.component.tsx | 3 +- .../src/form/canonical.tsx | 3 +- .../src/form/color.picker.tsx | 3 +- .../src/form/custom.select.tsx | 3 +- .../react-shared-libraries/src/form/input.tsx | 3 +- .../src/form/select.tsx | 3 +- .../src/form/textarea.tsx | 4 +- .../react-shared-libraries/src/form/total.tsx | 3 +- .../src/helpers/inter.font.ts | 7 --- package.json | 3 +- var/docker/Caddyfile | 14 ----- var/docker/entrypoint.sh | 17 ------ var/docker/nginx.conf | 53 +++++++++++++++++++ var/docker/supervisord.conf | 17 ------ var/docker/supervisord/caddy.conf | 9 ---- 48 files changed, 125 insertions(+), 187 deletions(-) delete mode 100644 libraries/react-shared-libraries/src/helpers/inter.font.ts delete mode 100644 var/docker/Caddyfile delete mode 100755 var/docker/entrypoint.sh create mode 100644 var/docker/nginx.conf delete mode 100644 var/docker/supervisord.conf delete mode 100644 var/docker/supervisord/caddy.conf diff --git a/Dockerfile.dev b/Dockerfile.dev index 55fe8690..72bb3654 100644 --- a/Dockerfile.dev +++ b/Dockerfile.dev @@ -1,21 +1,21 @@ FROM node:20-alpine3.19 ARG NEXT_PUBLIC_VERSION ENV NEXT_PUBLIC_VERSION=$NEXT_PUBLIC_VERSION -RUN apk add --no-cache g++ make py3-pip supervisor bash caddy +RUN apk add --no-cache g++ make py3-pip bash nginx +RUN adduser -D -g 'www' www +RUN mkdir /www +RUN chown -R www:www /var/lib/nginx +RUN chown -R www:www /www + + RUN npm --no-update-notifier --no-fund --global install pnpm@10.6.1 pm2 WORKDIR /app COPY . /app -COPY var/docker/supervisord.conf /etc/supervisord.conf -COPY var/docker/Caddyfile /app/Caddyfile -COPY var/docker/entrypoint.sh /app/entrypoint.sh -COPY var/docker/supervisord/caddy.conf /etc/supervisor.d/caddy.conf -RUN chmod +x /app/entrypoint.sh +COPY var/docker/nginx.conf /etc/nginx/nginx.conf RUN pnpm install -RUN pnpm run build +RUN NODE_OPTIONS="--max-old-space-size=4096" pnpm run build -EXPOSE 4200 - -CMD ["pnpm", "run", "pm2"] +CMD ["sh", "-c", "nginx && pnpm run pm2"] diff --git a/apps/backend/src/services/auth/auth.service.ts b/apps/backend/src/services/auth/auth.service.ts index 8dea316e..3b66da1e 100644 --- a/apps/backend/src/services/auth/auth.service.ts +++ b/apps/backend/src/services/auth/auth.service.ts @@ -21,7 +21,7 @@ export class AuthService { private _emailService: EmailService ) {} async canRegister(provider: string) { - if (!process.env.DISABLE_REGISTRATION || provider === Provider.GENERIC) { + if (!(process.env.DISABLE_REGISTRATION && process.env.DISABLE_REGISTRATION !== 'false') || provider === Provider.GENERIC) { return true; } diff --git a/apps/frontend/src/app/(app)/(preview)/p/[id]/layout.tsx b/apps/frontend/src/app/(app)/(preview)/p/[id]/layout.tsx index 226aca6f..aed33f16 100644 --- a/apps/frontend/src/app/(app)/(preview)/p/[id]/layout.tsx +++ b/apps/frontend/src/app/(app)/(preview)/p/[id]/layout.tsx @@ -1,5 +1,6 @@ import { ReactNode } from 'react'; import { PreviewWrapper } from '@gitroom/frontend/components/preview/preview.wrapper'; + export default async function AppLayout({ children }: { children: ReactNode }) { return (
diff --git a/apps/frontend/src/app/(app)/auth/page.tsx b/apps/frontend/src/app/(app)/auth/page.tsx index 9b3764b5..e9325352 100644 --- a/apps/frontend/src/app/(app)/auth/page.tsx +++ b/apps/frontend/src/app/(app)/auth/page.tsx @@ -12,7 +12,7 @@ export const metadata: Metadata = { }; export default async function Auth(params: {searchParams: {provider: string}}) { const t = await getT(); - if (process.env.DISABLE_REGISTRATION) { + if (process.env.DISABLE_REGISTRATION && process.env.DISABLE_REGISTRATION !== 'false') { const canRegister = ( await (await internalFetch('/auth/can-register')).json() ).register; diff --git a/apps/frontend/src/app/(app)/layout.tsx b/apps/frontend/src/app/(app)/layout.tsx index ebcc5700..736e9db6 100644 --- a/apps/frontend/src/app/(app)/layout.tsx +++ b/apps/frontend/src/app/(app)/layout.tsx @@ -1,11 +1,10 @@ -import interClass from '@gitroom/react/helpers/inter.font'; export const dynamic = 'force-dynamic'; import '../global.scss'; import 'react-tooltip/dist/react-tooltip.css'; import '@copilotkit/react-ui/styles.css'; import LayoutContext from '@gitroom/frontend/components/layout/layout.context'; import { ReactNode } from 'react'; -import { Chakra_Petch } from 'next/font/google'; +import { Plus_Jakarta_Sans } from 'next/font/google'; import PlausibleProvider from 'next-plausible'; import clsx from 'clsx'; import { VariableContextComponent } from '@gitroom/react/helpers/variable.context'; @@ -18,21 +17,23 @@ import { headers } from 'next/headers'; import { headerName } from '@gitroom/react/translation/i18n.config'; import { HtmlComponent } from '@gitroom/frontend/components/layout/html.component'; -const chakra = Chakra_Petch({ - weight: '400', +const jakartaSans = Plus_Jakarta_Sans({ + weight: ['600', '500'], + style: ['normal', 'italic'], subsets: ['latin'], }); + export default async function AppLayout({ children }: { children: ReactNode }) { const allHeaders = headers(); const Plausible = !!process.env.STRIPE_PUBLISHABLE_KEY ? PlausibleProvider : Fragment; return ( - + - + + - + {
{stars?.stars?.length ? ( - +
diff --git a/apps/frontend/src/components/auth/login.tsx b/apps/frontend/src/components/auth/login.tsx index 91ebfdc1..6344b918 100644 --- a/apps/frontend/src/components/auth/login.tsx +++ b/apps/frontend/src/components/auth/login.tsx @@ -10,7 +10,6 @@ import { classValidatorResolver } from '@hookform/resolvers/class-validator'; import { LoginUserDto } from '@gitroom/nestjs-libraries/dtos/auth/login.user.dto'; import { GithubProvider } from '@gitroom/frontend/components/auth/providers/github.provider'; import { OauthProvider } from '@gitroom/frontend/components/auth/providers/oauth.provider'; -import interClass from '@gitroom/react/helpers/inter.font'; import { GoogleProvider } from '@gitroom/frontend/components/auth/providers/google.provider'; import { useVariables } from '@gitroom/react/helpers/variable.context'; import { FarcasterProvider } from '@gitroom/frontend/components/auth/providers/farcaster.provider'; @@ -76,7 +75,7 @@ export function Login() {
{t('or', 'OR')}
diff --git a/apps/frontend/src/components/auth/login.with.oidc.tsx b/apps/frontend/src/components/auth/login.with.oidc.tsx index ee9e5e7a..4218faba 100644 --- a/apps/frontend/src/components/auth/login.with.oidc.tsx +++ b/apps/frontend/src/components/auth/login.with.oidc.tsx @@ -1,7 +1,6 @@ 'use client'; import { OauthProvider } from '@gitroom/frontend/components/auth/providers/oauth.provider'; -import interClass from '@gitroom/react/helpers/inter.font'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { useVariables } from '@gitroom/react/helpers/variable.context'; @@ -24,7 +23,7 @@ export const LoginWithOidc = () => {
diff --git a/apps/frontend/src/components/auth/providers/farcaster.provider.tsx b/apps/frontend/src/components/auth/providers/farcaster.provider.tsx index 33fd1a18..07b9408a 100644 --- a/apps/frontend/src/components/auth/providers/farcaster.provider.tsx +++ b/apps/frontend/src/components/auth/providers/farcaster.provider.tsx @@ -1,7 +1,6 @@ 'use client'; import { FC, useCallback } from 'react'; -import interClass from '@gitroom/react/helpers/inter.font'; import { useVariables } from '@gitroom/react/helpers/variable.context'; import { NeynarContextProvider, Theme, useNeynarContext } from '@neynar/react'; import { NeynarAuthButton } from '@gitroom/frontend/components/auth/nayner.auth.button'; @@ -27,7 +26,7 @@ export const ButtonCaster: FC<{ >
{ const fetch = useFetch(); @@ -12,7 +11,7 @@ export const GithubProvider = () => { return (
{ const fetch = useFetch(); @@ -12,7 +11,7 @@ export const GoogleProvider = () => { return (
{ @@ -27,7 +26,7 @@ export const OauthProvider = () => { return (
{ const t = useT(); return (
{t('or', 'OR')}
@@ -201,7 +200,7 @@ export function RegisterAfter({ placeholder="Company" />
-
+
{t( 'by_registering_you_agree_to_our', 'By registering you agree to our' diff --git a/apps/frontend/src/components/autopost/autopost.tsx b/apps/frontend/src/components/autopost/autopost.tsx index b564a84e..21af4652 100644 --- a/apps/frontend/src/components/autopost/autopost.tsx +++ b/apps/frontend/src/components/autopost/autopost.tsx @@ -14,7 +14,6 @@ import { useToaster } from '@gitroom/react/toaster/toaster'; import clsx from 'clsx'; import { deleteDialog } from '@gitroom/react/helpers/delete.dialog'; import { CopilotTextarea } from '@copilotkit/react-textarea'; -import interClass from '@gitroom/react/helpers/inter.font'; import { Slider } from '@gitroom/react/form/slider'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; export const Autopost: FC = () => { @@ -367,7 +366,7 @@ export const AddOrEditWebhook: FC<{ {!generateContent && ( <> -
+
{t('post_content', 'Post content')}
{title}
@@ -121,7 +120,7 @@ export const FAQSection: FC<{ onClick={(e) => { e.stopPropagation(); }} - className={`mt-[16px] w-full text-wrap ${interClass} font-[400] text-[16px] text-customColor17 select-text`} + className={`mt-[16px] w-full text-wrap font-[400] text-[16px] text-customColor17 select-text`} dangerouslySetInnerHTML={{ __html: description, }} diff --git a/apps/frontend/src/components/billing/main.billing.component.tsx b/apps/frontend/src/components/billing/main.billing.component.tsx index 90ba8e02..ce9f1de6 100644 --- a/apps/frontend/src/components/billing/main.billing.component.tsx +++ b/apps/frontend/src/components/billing/main.billing.component.tsx @@ -15,8 +15,7 @@ import { pricing } from '@gitroom/nestjs-libraries/database/prisma/subscriptions import { FAQComponent } from '@gitroom/frontend/components/billing/faq.component'; import { useSWRConfig } from 'swr'; import { useUser } from '@gitroom/frontend/components/layout/user.context'; -import interClass from '@gitroom/react/helpers/inter.font'; -import { useParams, useRouter, useSearchParams } from 'next/navigation'; +import { useRouter, useSearchParams } from 'next/navigation'; import { useVariables } from '@gitroom/react/helpers/variable.context'; import { useModals } from '@mantine/modals'; import { TopTitle } from '@gitroom/frontend/components/launches/helpers/top.title.component'; @@ -29,19 +28,7 @@ import { TrackEnum } from '@gitroom/nestjs-libraries/user/track.enum'; import { PurchaseCrypto } from '@gitroom/frontend/components/billing/purchase.crypto'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { FinishTrial } from '@gitroom/frontend/components/billing/finish.trial'; -import { LogoutComponent } from '@gitroom/frontend/components/layout/logout.component'; -export interface Tiers { - month: Array<{ - name: 'Pro' | 'Standard'; - recurring: 'month' | 'year'; - price: number; - }>; - year: Array<{ - name: 'Pro' | 'Standard'; - recurring: 'month' | 'year'; - price: number; - }>; -} + export const Prorate: FC<{ period: 'MONTHLY' | 'YEARLY'; pack: 'STANDARD' | 'PRO'; @@ -422,7 +409,7 @@ export const MainBillingComponent: FC<{ ? values.year_price : values.month_price}
-
+
{monthlyOrYearly === 'on' ? '/year' : '/month'}
diff --git a/apps/frontend/src/components/launches/comments/comment.component.tsx b/apps/frontend/src/components/launches/comments/comment.component.tsx index 10ce1ea9..ead064c8 100644 --- a/apps/frontend/src/components/launches/comments/comment.component.tsx +++ b/apps/frontend/src/components/launches/comments/comment.component.tsx @@ -9,7 +9,6 @@ import { useUser } from '@gitroom/frontend/components/layout/user.context'; import { Input } from '@gitroom/react/form/input'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { deleteDialog } from '@gitroom/react/helpers/delete.dialog'; -import interClass from '@gitroom/react/helpers/inter.font'; export const CommentBox: FC<{ value?: string; type: 'textarea' | 'input'; @@ -303,7 +302,7 @@ export const CommentComponent: FC<{
{comment.user.email[0].toUpperCase()}
@@ -331,7 +330,7 @@ export const CommentComponent: FC<{ >
{childComment.user.email[0].toUpperCase()}
diff --git a/apps/frontend/src/components/launches/general.preview.component.tsx b/apps/frontend/src/components/launches/general.preview.component.tsx index a91e31a3..33cb17e8 100644 --- a/apps/frontend/src/components/launches/general.preview.component.tsx +++ b/apps/frontend/src/components/launches/general.preview.component.tsx @@ -1,14 +1,13 @@ import { useIntegration } from '@gitroom/frontend/components/launches/helpers/use.integration'; import { useMediaDirectory } from '@gitroom/react/helpers/use.media.directory'; -import { useFormatting } from '@gitroom/frontend/components/launches/helpers/use.formatting'; import clsx from 'clsx'; import { VideoOrImage } from '@gitroom/react/helpers/video.or.image'; import { FC } from 'react'; import { textSlicer } from '@gitroom/helpers/utils/count.length'; -import interClass from '@gitroom/react/helpers/inter.font'; import Image from 'next/image'; import { useLaunchStore } from '@gitroom/frontend/components/new-launch/store'; import { stripHtmlValidation } from '@gitroom/helpers/utils/strip.html.validation'; + export const GeneralPreviewComponent: FC<{ maximumCharacters?: number; }> = (props) => { @@ -113,8 +112,7 @@ export const GeneralPreviewComponent: FC<{
e.stopPropagation()} - className={`absolute top-[100%] start-0 p-[12px] bg-newBgColorInner shadow-menu flex flex-col gap-[16px] z-[100] rounded-[8px] border border-tableBorder ${interClass} text-nowrap`} + className={`absolute top-[100%] start-0 p-[12px] bg-newBgColorInner shadow-menu flex flex-col gap-[16px] z-[100] rounded-[8px] border border-tableBorder text-nowrap`} > {canDisable && !findIntegration?.refreshNeeded && (
= (props) => { {!step ? (
{t('content_writer', 'Content Writer')} @@ -444,7 +442,6 @@ export const Card: FC<{
{t('influencer', 'Influencer')} @@ -467,7 +464,6 @@ export const Card: FC<{
{tags.map((tag, index) => ( diff --git a/apps/frontend/src/components/messages/messages.tsx b/apps/frontend/src/components/messages/messages.tsx index e3983444..89a80a35 100644 --- a/apps/frontend/src/components/messages/messages.tsx +++ b/apps/frontend/src/components/messages/messages.tsx @@ -29,7 +29,6 @@ export interface Message { deletedAt: any; } import { Textarea } from '@gitroom/react/form/textarea'; -import interClass from '@gitroom/react/helpers/inter.font'; import clsx from 'clsx'; import useSWR from 'swr'; import { @@ -114,7 +113,6 @@ export const Message: FC<{
           {message.content}
diff --git a/apps/frontend/src/components/new-launch/providers/devto/devto.tags.tsx b/apps/frontend/src/components/new-launch/providers/devto/devto.tags.tsx
index ff23626e..7d2c5a5e 100644
--- a/apps/frontend/src/components/new-launch/providers/devto/devto.tags.tsx
+++ b/apps/frontend/src/components/new-launch/providers/devto/devto.tags.tsx
@@ -2,7 +2,6 @@
 
 import { FC, useCallback, useEffect, useState } from 'react';
 import { ReactTags } from 'react-tag-autocomplete';
-import interClass from '@gitroom/react/helpers/inter.font';
 import { useCustomProviderFunction } from '@gitroom/frontend/components/launches/helpers/use.custom.provider.function';
 import { useSettings } from '@gitroom/frontend/components/launches/helpers/use.values';
 export const DevtoTags: FC<{
@@ -52,7 +51,7 @@ export const DevtoTags: FC<{
   }
   return (
     
-
{label}
+
{label}
-
{label}
+
{label}
-
+
{label}
-
{label}
+
{label}
{
diff --git a/apps/frontend/src/components/new-layout/layout.component.tsx b/apps/frontend/src/components/new-layout/layout.component.tsx index ffcb3f0c..14063dbb 100644 --- a/apps/frontend/src/components/new-layout/layout.component.tsx +++ b/apps/frontend/src/components/new-layout/layout.component.tsx @@ -2,7 +2,6 @@ import React, { ReactNode, useCallback } from 'react'; import { Logo } from '@gitroom/frontend/components/new-layout/logo'; -import { MenuItem } from '@gitroom/frontend/components/new-layout/menu-item'; import { Plus_Jakarta_Sans } from 'next/font/google'; const ModeComponent = dynamic( () => import('@gitroom/frontend/components/layout/mode.component'), @@ -14,7 +13,6 @@ const ModeComponent = dynamic( import clsx from 'clsx'; import dynamic from 'next/dynamic'; import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; -import { useT } from '@gitroom/react/translation/get.transation.service.client'; import { useVariables } from '@gitroom/react/helpers/variable.context'; import { useSearchParams } from 'next/navigation'; import useSWR from 'swr'; diff --git a/apps/frontend/src/components/notifications/notification.component.tsx b/apps/frontend/src/components/notifications/notification.component.tsx index 847d5fc8..11d5cfd6 100644 --- a/apps/frontend/src/components/notifications/notification.component.tsx +++ b/apps/frontend/src/components/notifications/notification.component.tsx @@ -5,7 +5,6 @@ import useSWR from 'swr'; import { FC, useCallback, useState } from 'react'; import clsx from 'clsx'; import { useClickAway } from '@uidotdev/usehooks'; -import interClass from '@gitroom/react/helpers/inter.font'; import ReactLoading from 'react-loading'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; function replaceLinks(text: string) { @@ -30,7 +29,7 @@ export const ShowNotification: FC<{ return (
{ className="opacity-0 animate-normalFadeDown mt-[10px] absolute w-[420px] min-h-[200px] top-[100%] end-0 bg-third text-textColor rounded-[16px] flex flex-col border border-tableBorder z-[20]" >
{t('notifications', 'Notifications')}
diff --git a/apps/frontend/src/components/settings/github.component.tsx b/apps/frontend/src/components/settings/github.component.tsx index a03af06a..50bc937f 100644 --- a/apps/frontend/src/components/settings/github.component.tsx +++ b/apps/frontend/src/components/settings/github.component.tsx @@ -7,7 +7,6 @@ import { useFetch } from '@gitroom/helpers/utils/custom.fetch'; import { deleteDialog } from '@gitroom/react/helpers/delete.dialog'; import { Input } from '@gitroom/react/form/input'; import { useToaster } from '@gitroom/react/toaster/toaster'; -import interClass from '@gitroom/react/helpers/inter.font'; import { useT } from '@gitroom/react/translation/get.transation.service.client'; const ConnectedComponent: FC<{ id: string; @@ -34,7 +33,7 @@ const ConnectedComponent: FC<{ return (
-
+
GitHub
@@ -89,7 +88,7 @@ const ConnectComponent: FC<{ return (
-
+
GitHub
@@ -196,7 +195,7 @@ export const GithubComponent: FC<{ ))} {githubState.filter((f) => !f.login).length === 0 && (
-
+
{ {+myLevel > +getLevel(p.role) ? (