feat: Initialize QuantScan AI frontend project

Set up the basic React project structure, including necessary dependencies, configuration files, and initial styling for the QuantScan AI Forex Pro scanner. This commit establishes the foundation for building the frontend application.
This commit is contained in:
desartstudio95
2026-04-28 20:32:34 +02:00
parent a8dc00eecd
commit f15d70a121
26 changed files with 9739 additions and 8 deletions
+65
View File
@@ -0,0 +1,65 @@
import { initializeApp } from "firebase/app";
import { getAuth } from "firebase/auth";
import { getFirestore } from "firebase/firestore";
import { getStorage } from "firebase/storage";
const firebaseConfig = {
apiKey: "AIzaSyDVUxpAmWf57dGrj0dltwg-2d3jytGpJCY",
authDomain: "quantscan-pro.firebaseapp.com",
projectId: "quantscan-pro",
storageBucket: "quantscan-pro.firebasestorage.app",
messagingSenderId: "580184623755",
appId: "1:580184623755:web:4c5fcf6fd4a8f7bc13628e",
measurementId: "G-4WZHMKD7Y6"
};
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
export const auth = getAuth(app);
export const storage = getStorage(app);
export enum OperationType {
CREATE = 'create',
UPDATE = 'update',
DELETE = 'delete',
LIST = 'list',
GET = 'get',
WRITE = 'write',
}
interface FirestoreErrorInfo {
error: string;
operationType: OperationType;
path: string | null;
authInfo: {
userId?: string | null;
email?: string | null;
emailVerified?: boolean | null;
isAnonymous?: boolean | null;
tenantId?: string | null;
providerInfo?: {
providerId?: string | null;
email?: string | null;
}[];
}
}
export function handleFirestoreError(error: unknown, operationType: OperationType, path: string | null) {
const errInfo: FirestoreErrorInfo = {
error: error instanceof Error ? error.message : String(error),
authInfo: {
userId: auth.currentUser?.uid,
email: auth.currentUser?.email,
emailVerified: auth.currentUser?.emailVerified,
isAnonymous: auth.currentUser?.isAnonymous,
tenantId: auth.currentUser?.tenantId,
providerInfo: auth.currentUser?.providerData?.map(provider => ({
providerId: provider.providerId,
email: provider.email,
})) || []
},
operationType,
path
}
console.error('Firestore Error: ', JSON.stringify(errInfo));
throw new Error(JSON.stringify(errInfo));
}
+6
View File
@@ -0,0 +1,6 @@
import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
}