0% found this document useful (0 votes)
9 views19 pages

Frontend Setup for Finance Tracker App

Uploaded by

bhotosooty
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
9 views19 pages

Frontend Setup for Finance Tracker App

Uploaded by

bhotosooty
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

Let's start with building the frontend step by step.

Here's a detailed
implementation plan for the requested features:

1. Set Up the Frontend

1. Bootstrap React App:

2. npx create-react-app finance-tracker

3. cd finance-tracker

4. Install Required Libraries:

5. npm install react-router-dom axios [Link] bootstrap

6. Folder Structure: Create a logical structure:

7. src/

8. ├── components/

9. │ ├── [Link]

10. │ ├── [Link]

11. │ ├── [Link]

12. │ ├── [Link]

13. │ ├── [Link]

14. │ ├── [Link]

15. │ ├── [Link]

16. │ ├── [Link]

17. │ ├── [Link]

18. │ └── [Link]

19. ├── [Link]

20. ├── [Link]

21. ├── api/

22. │ └── [Link] # Axios configuration for API calls

23. ├── styles/

24. │ ├── [Link]

25. │ └── [Link]


26. └── context/ # Optional for state management

27. Set Up Routing: Modify src/[Link] to define routes:

28. import React from 'react';

29. import { BrowserRouter as Router, Routes, Route } from


'react-router-dom';

30. import LandingPage from './components/LandingPage';

31. import Login from './components/Login';

32. import Signup from './components/Signup';

33. import Home from './components/Home';

34.

35. const App = () => (

36. <Router>

37. <Routes>

38. <Route path="/" element={<LandingPage />} />

39. <Route path="/login" element={<Login />} />

40. <Route path="/signup" element={<Signup />} />

41. <Route path="/home" element={<Home />} />

42. </Routes>

43. </Router>

44. );

45.

46. export default App;

2. Implement Features

2.1 Landing Page

A simple introduction to the app with navigation to login or signup.

[Link]:

import React from 'react';

import { Link } from 'react-router-dom';


import './[Link]';

const LandingPage = () => (

<div className="landing-container">

<h1>Welcome to Personal Finance Tracker</h1>

<p>Manage your income, expenses, and savings effectively.</p>

<Link to="/login"><button className="btn">Login</button></Link>

<Link to="/signup"><button
className="btn">Signup</button></Link>

</div>

);

export default LandingPage;

2.2 Login Page

[Link]:

import React, { useState } from 'react';

import { useNavigate } from 'react-router-dom';

import axios from 'axios';

const Login = () => {

const [email, setEmail] = useState('');

const [password, setPassword] = useState('');

const navigate = useNavigate();

const handleLogin = async (e) => {

[Link]();

try {

const response = await [Link]('/api/auth/login', { email,


password });
[Link]('token', [Link]);

navigate('/home');

} catch (error) {

alert('Invalid credentials');

};

return (

<div className="login-container">

<h2>Login</h2>

<form onSubmit={handleLogin}>

<input

type="email"

placeholder="Email"

value={email}

onChange={(e) => setEmail([Link])}

/>

<input

type="password"

placeholder="Password"

value={password}

onChange={(e) => setPassword([Link])}

/>

<button type="submit">Login</button>

</form>

</div>

);

};
export default Login;

2.3 Signup Page

[Link]:

import React, { useState } from 'react';

import axios from 'axios';

const Signup = () => {

const [form, setForm] = useState({

name: '',

email: '',

password: '',

});

const handleSignup = async (e) => {

[Link]();

try {

await [Link]('/api/auth/signup', form);

alert('Account created successfully. Please login.');

} catch (error) {

alert('Signup failed');

};

return (

<div className="signup-container">

<h2>Signup</h2>

<form onSubmit={handleSignup}>

<input
type="text"

placeholder="Name"

onChange={(e) => setForm({ ...form, name: [Link] })}

/>

<input

type="email"

placeholder="Email"

onChange={(e) => setForm({ ...form, email: [Link] })}

/>

<input

type="password"

placeholder="Password"

onChange={(e) => setForm({ ...form, password: [Link] })}

/>

<button type="submit">Signup</button>

</form>

</div>

);

};

export default Signup;

2.4 Home Page

[Link]:

import React from 'react';

import { Link } from 'react-router-dom';

const Navbar = () => (

<nav>
<Link to="/home">Home</Link>

<Link to="/transactions">Transactions</Link>

<Link to="/reports">Reports</Link>

<Link to="/profile">Profile</Link>

<Link to="/chat">Chat Buddy</Link>

</nav>

);

export default Navbar;

[Link]:

import React from 'react';

import Navbar from './Navbar';

const Home = () => (

<div>

<Navbar />

<h1>Welcome to the Dashboard</h1>

{/* Add quick summaries or links here */}

</div>

);

export default Home;

2.5 Transaction History with Filters and Categorization

[Link]:

import React, { useState, useEffect } from 'react';

import axios from 'axios';

const TransactionHistory = () => {


const [transactions, setTransactions] = useState([]);

const [filter, setFilter] = useState('');

useEffect(() => {

[Link]('/api/transactions')

.then(response => setTransactions([Link]))

.catch(error => [Link](error));

}, []);

const filteredTransactions = [Link](tx =>

[Link]().includes([Link]())

);

return (

<div>

<h2>Transaction History</h2>

<input

type="text"

placeholder="Filter by category"

value={filter}

onChange={(e) => setFilter([Link])}

/>

<ul>

{[Link](tx => (

<li key={[Link]}>

{[Link]} - {[Link]} - ${[Link]} ({[Link]})

</li>

))}

</ul>
</div>

);

};

export default TransactionHistory;

2.6 Add Transaction

[Link]:

// Refer to the `TransactionForm` provided earlier in the conversation.

2.7 Reports (Charts)

Use [Link] for visualizations. You can display spending trends and
income-expense comparisons.

[Link]:

// Will add sample charts in the next step!

2.8 Chat with Buddy

Integrate LangChain or Llama. I’ll provide the AI implementation details


when you’re ready for this feature.

Would you like to start with the provided steps, or should I expand on a
specific section?

Here’s the expanded code for all mentioned pages, including basic CSS
styling and session management using localStorage to maintain the user’s
session. The session management ensures that users remain logged in
across page reloads.

1. Landing Page

[Link]:

import React from "react";


import { Link } from "react-router-dom";

import "./[Link]";

const LandingPage = () => (

<div className="landing-container">

<h1>Welcome to Personal Finance Tracker</h1>

<p>Manage your income, expenses, and savings effectively.</p>

<div className="landing-buttons">

<Link to="/login">

<button className="btn">Login</button>

</Link>

<Link to="/signup">

<button className="btn">Signup</button>

</Link>

</div>

</div>

);

export default LandingPage;

[Link]:

.landing-container {

text-align: center;

margin-top: 50px;

.landing-container h1 {

font-size: 2.5rem;

margin-bottom: 20px;

}
.landing-container p {

font-size: 1.2rem;

margin-bottom: 30px;

.landing-buttons .btn {

margin: 10px;

padding: 10px 20px;

font-size: 1rem;

border: none;

border-radius: 5px;

background-color: #007bff;

color: white;

cursor: pointer;

transition: background-color 0.3s;

.landing-buttons .btn:hover {

background-color: #0056b3;

2. Login Page

[Link]:

import React, { useState } from "react";

import { useNavigate } from "react-router-dom";

import axios from "axios";

import "./[Link]";
const Login = () => {

const [email, setEmail] = useState("");

const [password, setPassword] = useState("");

const navigate = useNavigate();

const handleLogin = async (e) => {

[Link]();

try {

const response = await [Link]("/api/auth/login", { email, password


});

[Link]("token", [Link]); // Save token in


localStorage

navigate("/home");

} catch (error) {

alert("Invalid credentials. Please try again.");

};

return (

<div className="login-container">

<h2>Login</h2>

<form onSubmit={handleLogin}>

<input

type="email"

placeholder="Email"

value={email}

onChange={(e) => setEmail([Link])}

/>

<input

type="password"
placeholder="Password"

value={password}

onChange={(e) => setPassword([Link])}

/>

<button type="submit">Login</button>

</form>

</div>

);

};

export default Login;

[Link]:

.login-container {

max-width: 400px;

margin: 50px auto;

text-align: center;

padding: 20px;

border: 1px solid #ccc;

border-radius: 5px;

.login-container h2 {

font-size: 1.5rem;

margin-bottom: 20px;

.login-container form input {

width: 100%;

padding: 10px;
margin-bottom: 10px;

font-size: 1rem;

border: 1px solid #ccc;

border-radius: 5px;

.login-container form button {

width: 100%;

padding: 10px;

background-color: #007bff;

color: white;

font-size: 1rem;

border: none;

border-radius: 5px;

cursor: pointer;

transition: background-color 0.3s;

.login-container form button:hover {

background-color: #0056b3;

3. Signup Page

[Link]:

import React, { useState } from "react";

import axios from "axios";

import "./[Link]";

const Signup = () => {


const [form, setForm] = useState({ name: "", email: "", password: "" });

const handleSignup = async (e) => {

[Link]();

try {

await [Link]("/api/auth/signup", form);

alert("Signup successful! You can now login.");

} catch (error) {

alert("Signup failed. Please try again.");

};

return (

<div className="signup-container">

<h2>Signup</h2>

<form onSubmit={handleSignup}>

<input

type="text"

placeholder="Name"

value={[Link]}

onChange={(e) => setForm({ ...form, name: [Link] })}

/>

<input

type="email"

placeholder="Email"

value={[Link]}

onChange={(e) => setForm({ ...form, email: [Link] })}

/>

<input
type="password"

placeholder="Password"

value={[Link]}

onChange={(e) => setForm({ ...form, password: [Link] })}

/>

<button type="submit">Signup</button>

</form>

</div>

);

};

export default Signup;

[Link]:

.signup-container {

max-width: 400px;

margin: 50px auto;

text-align: center;

padding: 20px;

border: 1px solid #ccc;

border-radius: 5px;

.signup-container h2 {

font-size: 1.5rem;

margin-bottom: 20px;

.signup-container form input {

width: 100%;
padding: 10px;

margin-bottom: 10px;

font-size: 1rem;

border: 1px solid #ccc;

border-radius: 5px;

.signup-container form button {

width: 100%;

padding: 10px;

background-color: #28a745;

color: white;

font-size: 1rem;

border: none;

border-radius: 5px;

cursor: pointer;

transition: background-color 0.3s;

.signup-container form button:hover {

background-color: #218838;

4. Add Session Feature

Session Management:

1. Store the user token in localStorage upon login.

2. Create a PrivateRoute component to protect authenticated pages.

[Link]:

import React from "react";


import { Navigate } from "react-router-dom";

const PrivateRoute = ({ children }) => {

const token = [Link]("token");

return token ? children : <Navigate to="/login" />;

};

export default PrivateRoute;

[Link]: Update [Link] to include PrivateRoute for protected pages.

import React from "react";

import { BrowserRouter as Router, Routes, Route } from "react-router-


dom";

import LandingPage from "./components/LandingPage";

import Login from "./components/Login";

import Signup from "./components/Signup";

import Home from "./components/Home";

import PrivateRoute from "./components/PrivateRoute";

const App = () => (

<Router>

<Routes>

<Route path="/" element={<LandingPage />} />

<Route path="/login" element={<Login />} />

<Route path="/signup" element={<Signup />} />

<Route path="/home" element={<PrivateRoute><Home


/></PrivateRoute>} />

</Routes>

</Router>

);
export default App;

The above includes:

 Pages with forms and routing.

 CSS for styling.

 Session management using localStorage.

Would you like me to expand more on additional features like transaction


history, reports, or chatbot integration?

You might also like