List Of New Malayalam Movies

import React,  useState, useEffect  from 'react';
import './MovieList.css';

const MovieList = () => const [movies, setMovies] = useState([]); const [filteredMovies, setFilteredMovies] = useState([]); const [search, setSearch] = useState(''); const [sortBy, setSortBy] = useState('newest');

useEffect(() => fetch('http://localhost:5000/api/new-malayalam-movies') .then(res => res.json()) .then(data => setMovies(data); setFilteredMovies(data); ) .catch(err => console.error(err)); , []);

useEffect(() => let result = [...movies];

// Search filter
if (search) 
  result = result.filter(m => 
    m.title.toLowerCase().includes(search.toLowerCase())
  );
// Sorting
if (sortBy === 'newest') 
  result.sort((a, b) => new Date(b.releaseDate) - new Date(a.releaseDate));
 else if (sortBy === 'oldest') 
  result.sort((a, b) => new Date(a.releaseDate) - new Date(b.releaseDate));
 else if (sortBy === 'rating') 
  result.sort((a, b) => b.voteAverage - a.voteAverage);
setFilteredMovies(result);

, [search, sortBy, movies]);

return ( <div className="movie-list-container"> <h1>🎬 New Malayalam Movies</h1> list of new malayalam movies

  <div className="controls">
    <input 
      type="text" 
      placeholder="Search movies..." 
      value=search
      onChange=(e) => setSearch(e.target.value)
    />
    <select value=sortBy onChange=(e) => setSortBy(e.target.value)>
      <option value="newest">Newest First</option>
      <option value="oldest">Oldest First</option>
      <option value="rating">Top Rated</option>
    </select>
  </div>
<div className="movie-grid">
    filteredMovies.map(movie => (
      <div key=movie.id className="movie-card">
        movie.posterPath ? (
          <img src=movie.posterPath alt=movie.title />
        ) : (
          <div className="no-poster">No Poster</div>
        )
        <h3>movie.title</h3>
        <p>📅 new Date(movie.releaseDate).toDateString()</p>
        <p>⭐ movie.voteAverage ? movie.voteAverage.toFixed(1) : 'N/A'/10</p>
        <p className="overview">movie.overview?.substring(0, 100)...</p>
      </div>
    ))
  </div>
</div>

); ;

export default MovieList;

const express = require('express');
const axios = require('axios');
const NodeCache = require('node-cache');
const app = express();
const cache = new NodeCache( stdTTL: 3600 ); // 1 hour

const TMDB_API_KEY = 'your_tmdb_api_key_here'; const TMDB_BASE = 'https://api.themoviedb.org/3'; import React, useState, useEffect from 'react'; import '

// Fetch new Malayalam movies (released in last 180 days) app.get('/api/new-malayalam-movies', async (req, res) => const cacheKey = 'malayalam_new_movies'; let movies = cache.get(cacheKey);

if (!movies) try const today = new Date(); const sixMonthsAgo = new Date(); sixMonthsAgo.setMonth(today.getMonth() - 6);

  const fromDate = sixMonthsAgo.toISOString().split('T')[0];
  const toDate = today.toISOString().split('T')[0];
// Discover movies with language = ml, region = IN, primary release date range
  const response = await axios.get(`$TMDB_BASE/discover/movie`, 
    params: 
      api_key: TMDB_API_KEY,
      language: 'ml',
      region: 'IN',
      with_original_language: 'ml',
      'primary_release_date.gte': fromDate,
      'primary_release_date.lte': toDate,
      sort_by: 'release_date.desc',
      include_adult: false
);
movies = response.data.results.map(movie => (
    id: movie.id,
    title: movie.title,
    originalTitle: movie.original_title,
    releaseDate: movie.release_date,
    posterPath: movie.poster_path ? `https://image.tmdb.org/t/p/w500$movie.poster_path` : null,
    voteAverage: movie.vote_average,
    overview: movie.overview,
    genreIds: movie.genre_ids
  ));
cache.set(cacheKey, movies);
 catch (error) 
  return res.status(500).json( error: 'Failed to fetch movies' );

res.json(movies); );

app.listen(5000, () => console.log('Server running on port 5000'));

Directed by Vishnu Narayan, this film starring Saiju Kurup and Priyamvada Krishna is a haunting thriller about a mother's desperate search for her missing daughter in a hill station. It stands out for its atmospheric tension and sound design.