Index: backend/src/main/java/com/tradingmk/backend/WebConfig.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/WebConfig.java	(revision 0ba1544afcba86d37b8e2883eb29a4b58e6b2914)
+++ backend/src/main/java/com/tradingmk/backend/WebConfig.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
@@ -11,6 +11,7 @@
     public void addCorsMappings(CorsRegistry registry) {
         registry.addMapping("/**")
-                .allowedOrigins("http://localhost:5175", "http://localhost:5176","http://localhost:5173")
+                .allowedOrigins("http://localhost:5175", "http://localhost:5176","http://localhost:5173","http://localhost:3000")
                 .allowedMethods("*")
+                .allowedHeaders("*")
                 .allowedHeaders("*").allowCredentials(true);
     }
Index: backend/src/main/java/com/tradingmk/backend/config/JwtAuthenticationFilter.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/config/JwtAuthenticationFilter.java	(revision 0ba1544afcba86d37b8e2883eb29a4b58e6b2914)
+++ backend/src/main/java/com/tradingmk/backend/config/JwtAuthenticationFilter.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
@@ -28,7 +28,9 @@
     @Override
     protected void doFilterInternal(@NonNull HttpServletRequest request, @NonNull HttpServletResponse response, @NonNull FilterChain filterChain) throws ServletException, IOException {
+
         final String authHeader = request.getHeader("Authorization");
         final String jwt;
         final String username;
+        System.out.println("Authorization header: " + authHeader);
 
         //implement check
@@ -39,7 +41,9 @@
         //extract token from header
         jwt = authHeader.substring(7);
+        System.out.println("Extracted JWT: " + jwt);
 
         //extract username
         username = userService.extractUsername(jwt);
+        System.out.println("Extracted username: " + username);
 
 
@@ -60,5 +64,4 @@
         }
         filterChain.doFilter(request,response);
-
     }
 }
Index: backend/src/main/java/com/tradingmk/backend/config/SecurityConfig.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/config/SecurityConfig.java	(revision 0ba1544afcba86d37b8e2883eb29a4b58e6b2914)
+++ backend/src/main/java/com/tradingmk/backend/config/SecurityConfig.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
@@ -21,4 +21,6 @@
     public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
         http
+                .cors()
+                .and()
                 .csrf()
                 .disable()
@@ -26,10 +28,11 @@
                 .requestMatchers(
                                 "/api/auth/**",
-                                "/api/stocks/update",  // morame allow za da postiras, smeni go~!
+                                "/api/stocks/update",  // morame allow za da postiras
                                 "/api/stocks/**",
                                 "/ws/**",
                                 "/topic/**",
-                                "api/history/upload",
-                                "/api/history/{symbol}")
+                                "/api/history/upload",
+                                "/api/history/{symbol}",
+                                "/api/portfolio/**")
                 .permitAll()
                 .anyRequest()
Index: backend/src/main/java/com/tradingmk/backend/controller/PortfolioController.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/controller/PortfolioController.java	(revision 0ba1544afcba86d37b8e2883eb29a4b58e6b2914)
+++ backend/src/main/java/com/tradingmk/backend/controller/PortfolioController.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
@@ -2,18 +2,17 @@
 
 
-import com.tradingmk.backend.dto.PortfolioDTO;
-import com.tradingmk.backend.dto.PortfolioHoldingDTO;
-import com.tradingmk.backend.dto.PortfolioResponse;
+import com.tradingmk.backend.dto.*;
 import com.tradingmk.backend.model.PortfolioHolding;
 import com.tradingmk.backend.repository.PortfolioHoldingRepository;
 import com.tradingmk.backend.repository.PortfolioRepository;
 import com.tradingmk.backend.repository.UserRepository;
+import com.tradingmk.backend.service.PortfolioService;
+import lombok.RequiredArgsConstructor;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.core.annotation.AuthenticationPrincipal;
 import org.springframework.security.core.userdetails.UserDetails;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
+import java.security.Principal;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -26,9 +25,11 @@
     private final UserRepository userRepository;
     private final PortfolioHoldingRepository portfolioHoldingRepository;
+    private final PortfolioService portfolioService;
 
-    public PortfolioController(PortfolioRepository portfolioRepository, UserRepository userRepository, PortfolioHoldingRepository portfolioHoldingRepository) {
+    public PortfolioController(PortfolioRepository portfolioRepository, UserRepository userRepository, PortfolioHoldingRepository portfolioHoldingRepository, PortfolioService portfolioService) {
         this.portfolioRepository = portfolioRepository;
         this.userRepository = userRepository;
         this.portfolioHoldingRepository = portfolioHoldingRepository;
+        this.portfolioService = portfolioService;
     }
 
@@ -55,3 +56,47 @@
         return ResponseEntity.ok(portfolio);
     }
+
+    @PostMapping("/buy")
+    public ResponseEntity<String> buyStock(@RequestBody BuyStockRequest request, Principal principal) {
+        System.out.println("Principal: " + principal);
+        //geting user
+        var user = userRepository.findByUsername(principal.getName())
+                .orElseThrow(() -> new RuntimeException("user not found"));
+
+        //portfolio gett
+        var portfolio = portfolioRepository.findByUserId(user.getId())
+                .orElseThrow(() -> new RuntimeException("portfolio not found"));
+
+        portfolioService.buyStock(
+                portfolio.getId(),
+                request.getStockSymbol(),
+                request.getQuantity(),
+                request.getPricePerUnit()
+        );
+
+        return ResponseEntity.ok("stock purchased successfuly");
+    }
+
+
+    @PostMapping("/sell")
+    public ResponseEntity<String> sellStock(@RequestBody SellStockRequest request, Principal principal) {
+        //geting user
+        var user = userRepository.findByUsername(principal.getName())
+                .orElseThrow(() -> new RuntimeException("user not found"));
+
+
+        //portfolio gett
+        var portfolio = portfolioRepository.findByUserId(user.getId())
+                .orElseThrow(() -> new RuntimeException("portfolio not found"));
+
+        portfolioService.sellStock(
+                portfolio.getId(),
+                request.getStockSymbol(),
+                request.getQuantity(),
+                request.getPricePerUnit()
+        );
+
+        return ResponseEntity.ok("stock sold successfuly");
+    }
+
 }
Index: backend/src/main/java/com/tradingmk/backend/dto/BuyStockRequest.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/dto/BuyStockRequest.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
+++ backend/src/main/java/com/tradingmk/backend/dto/BuyStockRequest.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
@@ -0,0 +1,12 @@
+package com.tradingmk.backend.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class BuyStockRequest {
+    private String stockSymbol;
+    private int quantity;
+    private BigDecimal pricePerUnit;
+}
Index: backend/src/main/java/com/tradingmk/backend/dto/SellStockRequest.java
===================================================================
--- backend/src/main/java/com/tradingmk/backend/dto/SellStockRequest.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
+++ backend/src/main/java/com/tradingmk/backend/dto/SellStockRequest.java	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
@@ -0,0 +1,12 @@
+package com.tradingmk.backend.dto;
+
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class SellStockRequest {
+    private String stockSymbol;
+    private int quantity;
+    private BigDecimal pricePerUnit;
+}
Index: frontend/src/pages/DetailedStockView/DetailedStockView.jsx
===================================================================
--- frontend/src/pages/DetailedStockView/DetailedStockView.jsx	(revision 0ba1544afcba86d37b8e2883eb29a4b58e6b2914)
+++ frontend/src/pages/DetailedStockView/DetailedStockView.jsx	(revision d12f01b171edcf326297341c70d7ad611ac288ee)
@@ -11,4 +11,24 @@
     const [currentPrice, setCurrentPrice] = useState(null);
     const [percentage, setPercentage] = useState(null);
+
+    const [buyQuantity, setBuyQuantity] = useState(0);
+    const [buyTotal, setBuyTotal] = useState(0);
+    const [availableBalance, setAvailableBalance] = useState(0);
+
+    const [portfolio, setPortfolio] = useState(null);
+
+
+    useEffect(() => {
+        fetch('http://localhost:8080/api/portfolio', {
+            headers: {
+                'Authorization': `Bearer ${localStorage.getItem('accessToken')}`
+            }
+        })
+            .then(res => res.json())
+            .then(data => setPortfolio(data))
+            .catch(err => console.error(err));
+    }, []);
+
+    const portfolioId = portfolio?.id;
 
     useEffect(() => {
@@ -61,4 +81,64 @@
         }
     }, [chartData]);
+
+    const handleBuy = async () => {
+        if (!buyQuantity || buyQuantity <= 0) {
+            alert("Enter a valid quantity");
+            return;
+        }
+
+        const token = localStorage.getItem("accessToken");
+        if (!token) {
+            alert("you must be logged in to buy stocks");
+            return;
+        }
+
+
+
+
+
+        try {
+            const response = await fetch("http://localhost:8080/api/portfolio/buy", {
+                method: "POST",
+                headers: {
+                    "Content-Type": "application/json",
+                    "Authorization": `Bearer ${token}`
+                },
+                body: JSON.stringify({
+                    portfolioId: portfolioId,
+                    stockSymbol: symbol,
+                    quantity: parseInt(buyQuantity),
+                    pricePerUnit: currentPrice
+                })
+            });
+
+            if (!response.ok) {
+                const text = await response.text();
+                console.error("Error:", text);
+                alert("Failed to buy stock: " + text);
+                return;
+            }
+
+            alert("Stock purchased successfully!");
+            setBuyQuantity("");
+        } catch (err) {
+            console.error("Fetch error:", err);
+            alert("Network error");
+        }
+    };
+
+
+
+
+    useEffect(() => {
+        const token = localStorage.getItem("accessToken");
+
+        fetch("http://localhost:8080/api/portfolio", {
+            headers: { Authorization: `Bearer ${token}` }
+        })
+            .then(res => res.json())
+            .then(data => setAvailableBalance(data.balance))
+            .catch(err => console.error("Error fetching balance", err));
+    }, []);
 
     return (
@@ -149,12 +229,19 @@
                                     <span className="text-white font-bold text-xs">Ξ</span>
                                 </div>
-                                <span className="font-medium">ALK</span>
+                                <span className="font-medium">{symbol}</span>
                             </div>
                             <span className="text-sm text-gray-500">You Buy</span>
+
                         </div>
                         <input
-                            type="text"
+                            type="number"
+                            min="0"
                             className="text-2xl font-bold mb-1"
-                            value="0"
+                            value={buyQuantity}
+                            onChange={(e) => {
+                                const qty = Number(e.target.value);
+                                setBuyQuantity(qty);
+                                setBuyTotal(qty * (currentPrice || 0));
+                            }}
                         />
 
@@ -172,5 +259,5 @@
                             <span className="text-sm text-gray-500">You Spend</span>
                         </div>
-                        <div className="text-2xl font-bold mb-1">0</div>
+                        <div className="text-2xl font-bold mb-1">{buyTotal.toFixed(2)}</div>
 
                     </div>
@@ -178,5 +265,7 @@
 
                     <button
-                        className="w-full bg-gradient-to-r from-green-400 to-blue-500 text-white py-3 rounded-lg font-medium mb-4">
+                        onClick={handleBuy}
+                        className="w-full bg-gradient-to-r from-green-400 to-blue-500 text-white py-3 rounded-lg font-medium mb-4"
+                    >
                         Buy
                     </button>
@@ -186,5 +275,5 @@
                         <div className="text-sm text-gray-500 mb-2">Available Balance</div>
                         <div className="flex items-baseline space-x-2 mb-4">
-                            <span className="text-xl font-bold">0.00 MKD</span>
+                            <span className="text-xl font-bold">{availableBalance.toFixed(2)} MKD</span>
 
                         </div>
