from flask import Blueprint, request, render_template, abort, Markup
import os
import markdown
import time
viewer_bp = Blueprint("viewer", __name__)
DOCUMENTS_FOLDER = 'documents_db'
ALLOWED_EXTENSIONS = {'.txt', '.html', '.md'}
# Simple in-memory cache
cache = {}
def log_access(doc_id):
with open("access.log", "a") as log_file:
log_file.write(f"{time.ctime()} - Accessed doc_id: {doc_id}\n")
def get_file_metadata(filepath):
stat = os.stat(filepath)
return {
'size_kb': round(stat.st_size / 1024, 2),
'last_modified': time.ctime(stat.st_mtime)
}
def resolve_document_path(doc_id):
for ext in ALLOWED_EXTENSIONS:
filename = f"{doc_id}{ext}"
filepath = os.path.join(DOCUMENTS_FOLDER, filename)
if os.path.isfile(filepath):
return filepath
return None
def render_file_content(filepath):
if filepath in cache:
return cache[filepath]
try:
with open(filepath, 'r', encoding='utf-8') as f:
content = f.read()
if filepath.endswith('.md'):
content = markdown.markdown(content)
elif filepath.endswith('.html'):
content = Markup(content)
# Cache it
cache[filepath] = content
return content
except Exception as e:
print(f"Failed to read or process file: {e}")
return None
@viewer_bp.route("/view")
def view():
doc_id = request.args.get("doc_id")
if not doc_id:
abort(400, description="Missing doc_id")
filepath = resolve_document_path(doc_id)
if not filepath:
abort(404, description="Document not found")
content = render_file_content(filepath)
if content is None:
abort(500, description="Failed to load content")
metadata = get_file_metadata(filepath)
log_access(doc_id)
return render_template("viewer.html",
doc_id=doc_id,
content=content,
is_html=filepath.endswith(('.html', '.md')),
metadata=metadata)
next moving on teh the homepage
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ARVIS augmented reality virtual ID system</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.css">
<link rel="stylesheet" href="static/css/animate.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="static/css/style.css"/>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.0/css/all.css" integrity="sha384-lKuwvrZot6UHsBSfcMvOkWwlCMgc0TaWr+30HWe3a4ltaBwTZhyTEggF5tJv8tbt" crossorigin="anonymous">
<!-- Font Google -->
<link href="https://fonts.googleapis.com/css?family=Poppins:300,400,500,600,700" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<!-- Navbar -->
<nav class="navbar navbar-expand-lg">
<div class="container"> </a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="fas fa-bars"></span> </button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ml-auto">
<li class="nav-item"> <a class="nav-link" href="" data-scroll-nav="0">Home</a> </li>
<li class="nav-item"> <a class="nav-link" href="#" data-scroll-nav="1">About</a> </li>
<li class="nav-item"> <a class="nav-link" href="#" data-scroll-nav="2">Features</a> </li>
<li class="nav-item"> <a class="nav-link" href="#" data-scroll-nav="3">Team</a> </li>
<li class="nav-item"> <a class="nav-link" href="#" data-scroll-nav="4">Testimonials</a> </li>
<li class="nav-item"> <a class="nav-link" href="#" data-scroll-nav="5">Faq</a> </li>
<li class="nav-item"> <a class="nav-link" href="#" data-scroll-nav="6">Contact</a> </li>
</ul>
</div>
</div>
</nav>
<!-- End Navbar -->
<section class="banner" data-scroll-index='0'>
<div class="banner-overlay">
<div class="container">
<div class="row">
<div class="col-md-8 col-sm-12">
<div class="banner-text">
<h2 class="white">ARVIS - virtual AR ID card</h2>
<h6 class="white">One step solution for your virtual and intractive identity</h6>
<p class="banner-text white">Discover how ARVIS’s innovative AR ID card system is transforming industries by providing secure, interactive credential verification. From healthcare to education, our technology offers unique solutions tailored to meet specific industry needs, enhancing security and user experience.</p>
</div>
</div>
<div class="col-md-4 col-sm-12"> <img src="static/images/main1.png" class="img-fluid wow fadeInUp"/> </div>
</div>
</div>
</div>
<span class="svg-wave"> </span> </section>
<!-------Banner End------>
<!-------About strt------>
<section class="about section-padding prelative" data-scroll-index='1'>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="sectioner-header text-center">
<h3>More into ARVIS</h3>
<span class="line"></span>
<p>Discover the future of credential verification with our AR ID card system. Scan the QR code to unlock interactive augmented reality experiences, providing a secure and comprehensive information hub. Join us in revolutionizing identity management.</p>
</div>
<div class="section-content text-center">
<div class="row">
<div class="col-md-4">
<div class="icon-box wow fadeInUp" data-wow-delay="0.2s"> <i class="fa fa-life-ring" aria-hidden="true"></i>
<h5>Responsive</h5>
<p>An AR thats not just a display but a complete intractive setup for athentication.</p>
</div>
</div>
<div class="col-md-4">
<div class="icon-box wow fadeInUp" data-wow-delay="0.4s"> <i class="fa fa-mobile" aria-hidden="true"></i>
<h5>Mobile Friendly</h5>
<p>Scan QRs from the ease of your phone and verify the virtual ID card</p>
</div>
</div>
<div class="col-md-4">
<div class="icon-box wow fadeInUp" data-wow-delay="0.6s"> <i class="fa fa-bolt" aria-hidden="true"></i>
<h5>Embeded to the web </h5>
<p>The intracitve Ar are connected to the web and links that re-direct you to the required credentials</p>
</div>
</div>
</div>
<a href="#" class="about-btn">Learn More</a> </div>
</div>
</div>
</div>
</section>
<!-------About End------>
<!-------Video End------>
<section class="feature section-padding" data-scroll-index='2'>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="sectioner-header text-center">
<h3>Features</h3>
<span class="line"></span>
<p>Get your association the best deals. Starting from Rs.299 for smal scale to Rs. 1299 for large scale firms. Cunsult our sales teamfor more details . </p>
</div>
<div class="section-content text-center">
<div class="row">
<div class="col-md-4 col-sm-12">
<div class="media single-feature wow fadeInUp" data-wow-delay="0.2s">
<div class="media-body text-right media-right-margin">
<h5>Fast Processing</h5>
<p>Quick link redirections and dynamic routing using pythons backend</p>
</div>
<div class="media-right icon-border"> <span class="fa fa-bolt" aria-hidden="true"></span> </div>
</div>
<div class="media single-feature wow fadeInUp" data-wow-delay="0.4s">
<div class="media-body text-right media-right-margin">
<h5>Step One</h5>
<p>Scan the unique QR code on the AR ID card using your smartphone.</p>
</div>
<div class="media-right icon-border"> <span class="fa fa-battery-full" aria-hidden="true"></span> </div>
</div>
<div class="media single-feature wow fadeInUp" data-wow-delay="0.6s">
<div class="media-body text-right media-right-margin">
<h5>Step Two</h5>
<p>Experience the interactive AR elements that verify credentials instantly.</p>
</div>
<div class="media-right icon-border"> <span class="fa fa-wifi" aria-hidden="true"></span> </div>
</div>
</div>
<div class="col-md-4 d-none d-md-block d-lg-block">
<div class="feature-mobile"> <img src="static/images/mid-img.png" class="img-fluid wow fadeInUp"/> </div>
</div>
<div class="col-md-4 col-sm-12">
<div class="media single-feature wow fadeInUp" data-wow-delay="0.2s">
<div class="media-left icon-border media-right-margin"> <span class="fa fa-check-double" aria-hidden="true"></span> </div>
<div class="media-body text-left">
<h5>Interactive AR Experience</h5>
<p>Experience the future of credential verification with our AR ID card system. Scan the QR code to unlock a world of interactive AR elements that provide comprehensive information.</p>
</div>
</div>
<div class="media single-feature wow fadeInUp" data-wow-delay="0.4s">
<div class="media-left icon-border media-right-margin"> <span class="fa fa-dollar-sign" aria-hidden="true"></span> </div>
<div class="media-body text-left">
<h5>Save Money</h5>
<p>less of hard copies and no fear of loosing the IDs</p>
</div>
</div>
<div class="media single-feature wow fadeInUp" data-wow-delay="0.6s">
<div class="media-left icon-border media-right-margin"> <span class="fa fa-hdd" aria-hidden="true"></span> </div>
<div class="media-body text-left">
<h5>Ease</h5>
<p>Two step process for authentication</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="team section-padding" data-scroll-index='3'>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="sectioner-header text-center">
<h3>Our Team</h3>
<span class="line"></span>
<p>The final year students of D.K.T.E. college have come up futuristic app and credential verification system, presenting it to you as Mega Project , Enjoy Arvis and its features .</p>
</div>
<div class="section-content text-center">
<div class="row">
<div class="col-md-4">
<div class="team-detail wow bounce" data-wow-delay="0.2s"> <img src="static/images/shreya.jpg" class="img-fluid"/>
<h4>Shreya Alase</h4>
<p>Front end and Data Base </p>
</div>
</div>
<div class="col-md-4">
<div class="team-detail wow bounce" data-wow-delay="0.4s"> <img src="static/images/soniya.jpg" class="img-fluid"/>
<h4>Soniya Ankushrao </h4>
<p>Backend and Hosting</p>
</div>
</div>
<div class="col-md-4">
<div class="team-detail wow bounce" data-wow-delay="0.6s"> <img src="static/images/neha.jpg" class="img-fluid"/>
<h4>Neha Mitake</h4>
<p>AR intigration</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="faq section-padding prelative" data-scroll-index='5'>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="sectioner-header text-center">
<h3>More about ARVIS tech</h3>
<span class="line"></span>
<p>Discover how our AR ID card system transforms credential verification.</p>
</div>
<div class="section-content">
<div class="row">
<div class="col-md-6 faq-content wow fadeInUp" data-wow-delay="0.2s">
<h4>Innovation in Identification Systems</h4>
<p>Real-time verification ensures credentials are always up-to-date and secure..</p>
</div>
<div class="col-md-6 faq-content wow fadeInUp" data-wow-delay="0.2s">
<h4>Sustainability and Paperless Solutions</h4>
<p>This project promotes eco-friendly practices by replacing physical documents and presentations with digital, AR-based alternatives. By reducing paper consumption, it supports sustainability goals while maintaining high efficiency and accessibility.</p>
</div>
<div class="col-md-6 faq-content wow fadeInUp" data-wow-delay="0.4s">
<h4>Enhanced User Engagement</h4>
<p>AR technology makes mundane tasks, such as viewing credentials, engaging and interactive. Users can explore 3D models, access additional information via web links, and interact with digital elements, fostering an immersive experience.</p>
</div>
<div class="col-md-6 faq-content wow fadeInUp" data-wow-delay="0.4s">
<h4>Real-Time Data Accessibilit</h4>
<p>With QR code scanning linked to a secure database, this solution ensures users can access relevant information instantly. It eliminates delays in retrieving data, making processes smoother and more efficient.</p>
</div>
<div class="col-md-6 faq-content wow fadeInUp" data-wow-delay="0.6s">
<h4>Future Scope in Education</h4>
<p>The application can transform learning by integrating AR structures into educational content. Students can visualize concepts like molecular structures or historical monuments interactively, enhancing comprehension and retention.</p>
</div>
<div class="col-md-6 faq-content wow fadeInUp" data-wow-delay="0.6s">
<h4>Personalization in AR Experiences</h4>
<p>This solution can offer users the ability to personalize their AR interactions, such as customizing their ID cards or selecting specific 3D models. This personalization enhances user satisfaction and engagement.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<section class="contact section-padding" data-scroll-index='6'>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="sectioner-header text-center">
<h3>Contact us</h3>
<span class="line"></span>
<p>For intigrating Ar your association, completele athentictaion solutions from tecm ARVIS</p>
</div>
<div class="section-content">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-8">
<form id="contact_form" action="">
<div class="row">
<div class="col">
<input type="text" id="your_name" class="form-input w-100" name="full-name" placeholder="Full Name" required>
</div>
<div class="col">
<input type="email" id="email" class="form-input w-100" name="email" placeholder="Email" required>
</div>
</div>
<input type="text" id="subject" class="form-input w-100" name="subject" placeholder="Subject">
<textarea class="form-input w-100" id="message" placeholder="Message" name="message"></textarea>
<button class="btn-grad w-100 text-uppercase" type="submit" name="button">submit</button>
</form>
</div>
<div class="col-sm-12 col-md-12 col-lg-4">
<div class="contact-info white">
<div class="contact-item media"> <i class="fa fa-map-marker-alt media-left media-right-margin"></i>
<div class="media-body">
<p class="text-uppercase">Address</p>
<p class="text-uppercase">DKTE college , Ichalkaranji , MH, India</p>
</div>
</div>
<div class="contact-item media"> <i class="fa fa-mobile media-left media-right-margin"></i>
<div class="media-body">
<p class="text-uppercase">Phone</p>
<p class="text-uppercase"><a class="text-white" href="tel:+15173977100"></a>9373745097 </p>
</div>
</div>
<div class="contact-item media"> <i class="fa fa-envelope media-left media-right-margin"></i>
<div class="media-body">
<p class="text-uppercase">E-mail</p>
<p class="text-uppercase">soniyaankushrao195@gmai.com
</p>
</div>
</div>
<div class="contact-item media"> <i class="fa fa-clock media-left media-right-margin"></i>
<div class="media-body">
<p class="text-uppercase">Working Hours</p>
<p class="text-uppercase">Mon-Fri 9.00 AM to 5.00PM.</p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
<footer class="footer-copy">
<div class="container-fluid">
<div class="row">
<div class="col-md-12">
<p>2024 © ARVIS tech </p>
</div>
</div>
</div>
</footer>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/js/bootstrap.min.js" integrity="sha384-smHYKdLADwkXOn1EmN1qk/HfnUcbVRZyYmZ4qpPea6sjB/pTJ0euyQp0Mk8ck+5T" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/bxslider/4.2.12/jquery.bxslider.min.js"></script>
<!-- scrollIt js -->
<script src="static/js/scrollIt.min.js"></script>
<script src="static/js/wow.min.js"></script>
<script>
wow = new WOW();
wow.init();
$(document).ready(function(e) {
$('#video-icon').on('click',function(e){
e.preventDefault();
$('.video-popup').css('display','flex');
$('.iframe-src').slideDown();
});
$('.video-popup').on('click',function(e){
var $target = e.target.nodeName;
var video_src = $(this).find('iframe').attr('src');
if($target != 'IFRAME'){
$('.video-popup').fadeOut();
$('.iframe-src').slideUp();
$('.video-popup iframe').attr('src'," ");
$('.video-popup iframe').attr('src',video_src);
}
});
$('.slider').bxSlider({
pager: false
});
});
$(window).on("scroll",function () {
var bodyScroll = $(window).scrollTop(),
navbar = $(".navbar");
if(bodyScroll > 50){
$('.navbar-logo img').attr('src','images/logo-black.png');
navbar.addClass("nav-scroll");
}else{
$('.navbar-logo img').attr('src','images/logo.png');
navbar.removeClass("nav-scroll");
}
});
$(window).on("load",function (){
var bodyScroll = $(window).scrollTop(),
navbar = $(".navbar");
if(bodyScroll > 50){
$('.navbar-logo img').attr('src','images/logo-black.png');
navbar.addClass("nav-scroll");
}else{
$('.navbar-logo img').attr('src','images/logo-white.png');
navbar.removeClass("nav-scroll");
}
$.scrollIt({
easing: 'swing', // the easing function for animation
scrollTime: 900, // how long (in ms) the animation takes
activeClass: 'active', // class given to the active nav element
onPageChange: null, // function(pageIndex) that is called when page is changed
topOffset: -63
});
});
</script>
</body>
</html>
Top comments (0)