Small-group and private Pilates for discerning professionals. Experience results in Porto’s most refined studio.
8
max class size
95%
member retention
1:4
instructor:member ratio
Why Choose Us?
Pilates Designed for Your Success
Every session is calibrated to your body, your goals, your schedule.
Expert Coaching
Certified instructors (500+ hours) provide real-time form correction, ensuring measurable progress in every movement.
Exclusive Small Groups
Maximum 8 participants per class. Receive personalized attention without the private session premium.
Premium Reformer Equipment
Studio-grade Balanced Body equipment, meticulously maintained weekly. Trusted by professional athletes.
Flexible Booking
Morning, lunch, and evening classes, 7 days a week. Easy 24-hour cancellation and rescheduling via our member portal.
Objective Progress Tracking
Quarterly movement assessments track your strength, flexibility, and posture with objective data.
Holistic Movement
Beyond reps: we integrate breath work, mobility, and recovery for a stronger, more balanced you.
Your First Steps
Your First Month at FitTrack Gym
1
Book Your Foundation Session
Start with a complimentary 30-minute assessment. We’ll map your movement, discuss goals, and recommend your ideal class level.
2
Join Your First Class
Experience your first small-group session. Equipment setup and modifications are tailored to you – no prior experience needed.
3
Build Your Practice
Most members attend 2-3 sessions weekly within a month, reporting noticeable improvements in core strength and posture.
Testimonials
What Our Members Say
★★★★★
“After six months at FitTrack, my chronic lower back pain disappeared and I added 12kg to my deadlift—the instructors genuinely care about your progress.”
SM
Sofia M.
Marketing Director, Porto
★★★★★
“I’ve tried three pilates studios in Porto and this is the only one where I felt the instructor knew my name and my limitations by the second class.”
RL
Ricardo L.
Architect, Foz do Douro
★★★★★
“The small class sizes mean real coaching—I corrected a shoulder imbalance I’ve had for years because my instructor caught it in week one.”
AP
Ana P.
Lawyer, Boavista
Ready to Feel Better?
Book your complimentary foundation session and discover Porto’s most personalized Pilates studio.
Our Services
Pilates for Every Lifestyle
Small-group energy or focused one-on-one. Choose the session that moves you forward.
Small-Group Classes
Maximum 8 participants for personalized attention and a motivated community.
From €28/session
Private Sessions
100% tailored programming with a dedicated instructor, designed around your body and goals.
From €65/session
Reformer Pilates
Spring-loaded resistance training to sculpt lean muscle, improve posture, and build core stability.
All levels
Mat Pilates
Bodyweight flows that strengthen deep stabilizers and increase flexibility without equipment.
Beginner friendly
Power Pilates
High-intensity interval training meets classical Pilates. Cardio, plyometrics, and core work in one dynamic hour.
Intermediate+
Rehabilitation & Recovery
Gentle, therapeutic movement based on physiotherapy principles to rebuild strength post-injury or surgery.
Medical referrals accepted
Get in Touch
Begin Your Journey
Book your first session or ask us anything. We’re here to help you move better.
✉
Email
hello@fittrackgym.pt
☏
Phone
+351 220 123 456
⌖
Location
Porto, Portugal
◷
Hours
Mon–Sat, 7:00–21:00
document.documentElement.classList.add(‘js’);
(function(){
var pages = document.querySelectorAll(‘.page’);
var links = document.querySelectorAll(‘[data-nav]’);
var navLinks = document.querySelectorAll(‘.nav-link’);
var current = ‘home’;
function go(id, push){
if(!document.getElementById(‘page-‘+id) || id===current) return;
var out = document.getElementById(‘page-‘+current);
var into = document.getElementById(‘page-‘+id);
out.classList.add(‘leaving’);
setTimeout(function(){
out.classList.remove(‘active’,’leaving’);
into.classList.add(‘active’,’entering’);
window.scrollTo({top:0,behavior:’instant’});
setTimeout(function(){ into.classList.remove(‘entering’); bindReveal(into); },550);
}, 220);
current = id;
navLinks.forEach(function(l){ l.classList.toggle(‘active’, l.getAttribute(‘data-nav’)===id); });
if(push !== false) history.replaceState(null,”,’#/’+id);
document.querySelector(‘.nav-links’) && document.querySelector(‘.nav-links’).classList.remove(‘open’);
bindReveal(into);
}
links.forEach(function(l){ l.addEventListener(‘click’, function(e){ e.preventDefault(); go(l.getAttribute(‘data-nav’)); }); });
window.addEventListener(‘hashchange’, function(){
var nh = (location.hash||”).replace(‘#/’,”).replace(‘#’,”);
if(nh && nh!==current && document.getElementById(‘page-‘+nh)) go(nh, false);
});
var h = (location.hash||”).replace(‘#/’,”).replace(‘#’,”);
if(h && document.getElementById(‘page-‘+h)){
document.getElementById(‘page-‘+current).classList.remove(‘active’);
document.getElementById(‘page-‘+h).classList.add(‘active’);
current = h;
navLinks.forEach(function(l){ l.classList.toggle(‘active’, l.getAttribute(‘data-nav’)===h); });
}
// Nav scroll state
var nav = document.querySelector(‘.nav’);
window.addEventListener(‘scroll’, function(){ nav.classList.toggle(‘scrolled’, window.scrollY > 30); }, {passive:true});
// Burger
var burger = document.querySelector(‘.nav-burger’);
if(burger) burger.addEventListener(‘click’, function(){ document.querySelector(‘.nav-links’).classList.toggle(‘open’); });
// Reveal on scroll
var io = new IntersectionObserver(function(entries){
entries.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add(‘in’); io.unobserve(e.target); } });
}, {threshold:0.12});
function bindReveal(scope){
(scope||document).querySelectorAll(‘.rv:not(.in)’).forEach(function(el){ io.observe(el); });
}
bindReveal(document);
// Animated counters
var cio = new IntersectionObserver(function(entries){
entries.forEach(function(e){
if(!e.isIntersecting) return;
cio.unobserve(e.target);
var el = e.target, raw = el.getAttribute(‘data-count’)||”;
var m = raw.match(/^([d.,]+)(.*)$/);
if(!m) return;
var target = parseFloat(m[1].replace(/,/g,”)), suffix = m[2]||”;
var t0 = null, dur = 1400;
function tick(t){
if(!t0) t0 = t;
var p = Math.min((t-t0)/dur, 1), ease = 1-Math.pow(1-p,3);
el.textContent = (target%1===0 ? Math.round(target*ease).toLocaleString() : (target*ease).toFixed(1)) + suffix;
if(p<1) requestAnimationFrame(tick);
}
requestAnimationFrame(tick);
});
}, {threshold:0.6});
document.querySelectorAll('[data-count]').forEach(function(el){ cio.observe(el); });
})();