Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
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
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,7 @@ tmp/
*.sublime-project
*.tgz
*.lock
.env
.env
server/firebase.js

server/firebase.js
Comment on lines +31 to +33
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Verification agent

🧩 Analysis chain

Verify server/firebase.js was never committed; rotate if it was

If the file was ever tracked, adding to .gitignore won’t remove it from history. Check and purge/rotate secrets if needed.


🏁 Script executed:

#!/bin/bash
set -euo pipefail
# Is it currently tracked?
if git ls-files --error-unmatch server/firebase.js >/dev/null 2>&1; then
  echo "Tracked: server/firebase.js"
  echo "Run: git rm --cached server/firebase.js && git commit -m 'remove secret from repo'"
else
  echo "Not tracked in index."
fi
# Was it ever committed?
if git log -n 1 --pretty=format:%H -- server/firebase.js >/dev/null 2>&1; then
  echo "Found in history. Consider BFG/git-filter-repo to purge and rotate keys."
else
  echo "No history entries found."
fi

Length of output: 94


Purge server/firebase.js from repository history and rotate any exposed credentials.

server/firebase.js is not tracked in the index but is present in git history.

  • List commits referencing the file: git log --pretty=format:'%h %ad %an %s' -- server/firebase.js
  • Remove from history (recommended): git clone --mirror .git && cd .git && git filter-repo --path server/firebase.js --invert-paths && git push --force --all && git push --force --tags (or use BFG).
  • Rotate/revoke any API keys or service-account credentials that were in that file.
🤖 Prompt for AI Agents
.gitignore lines 31-33 reference server/firebase.js — the file exists in
repository history and may contain secrets; list all commits referencing it
(e.g., via git log for that path), then permanently remove it from history using
a tool like git filter-repo or BFG (mirror-clone the repo, remove the path, and
force-push all refs and tags), and finally rotate/revoke any API keys or
service-account credentials that were exposed in that file; after cleanup,
inform the team and update any CI/secret stores with new credentials.

30 changes: 28 additions & 2 deletions client/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
"react": "^19.1.0",
"react-chartjs-2": "^5.3.0",
"react-dom": "^19.1.0",
"react-hot-toast": "^2.6.0",
"react-icons": "^5.5.0",
"react-router-dom": "^6.30.1",
"recharts": "^3.0.2",
Expand Down
67 changes: 53 additions & 14 deletions client/src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,31 +1,70 @@
// import Header from "./components/Header";
// import Home from "./pages/Home";
// import Footer from "./components/Footer";

// function App() {
// return (
// <div className="min-h-screen bg-white">
// <Header />
// <Home />
// <Footer />
// </div>
// );
// }
// export default App;
import { Outlet } from "react-router-dom";
import Header from "./components/Header";
import Footer from "./components/Footer";
import ScrollToTop from "./components/ScrollToTop";
import { Toaster } from "react-hot-toast";

function App() {
return (
<div className="min-h-screen bg-white flex flex-col">
<ScrollToTop />
<Header />

<main className="flex-grow">
<Outlet /> {/* This will render the current page */}
</main>

<Footer />

{/* Global Toast container */}
<Toaster
position="top-right"
toastOptions={{
duration: 4000,
style: {
fontSize: "15px",
fontWeight: "600",
borderRadius: "14px",
padding: "14px 20px",
color: "#fff",
boxShadow: "0 6px 18px rgba(0,0,0,0.15)",
backgroundSize: "200% 200%",
animation: "gradientShift 3s ease infinite",
},
success: {
style: {
background: "linear-gradient(135deg, #34d399, #3b82f6)", // teal → blue
},
iconTheme: {
primary: "#10b981",
secondary: "#fff",
},
},
error: {
style: {
background: "linear-gradient(135deg, #f472b6, #a78bfa)", // pink → purple
},
iconTheme: {
primary: "#8b5cf6",
secondary: "#fff",
},
},
loading: {
style: {
background: "linear-gradient(135deg, #06b6d4, #3b82f6)", // cyan → blue
},
},
}}
/>

{/* Gradient animation keyframes */}
<style>{`
@keyframes gradientShift {
0% { background-position: 0% 50%; }
50% { background-position: 100% 50%; }
100% { background-position: 0% 50%; }
}
`}</style>
</div>
);
}
Expand Down
Loading