HAGS Connect

    A brief block of introductory copy about HAGS Connect.

    HAGS Connect Login
    My Product Collection

    To add a product simply click on Add to my collection on any product page. Once you have added products to a collection you will be able to print a product catalogue, download installation guides, images and DWG files or request a quote.

      Guide to designing an inclusive outdoor fitness area

      Outdoor gyms have become a popular way to stay fit, and for good reason. Not only are they a great, cost effective way to get a full body workout, but they also provide a unique, outdoor experience that can't be found in a traditional gym.

      Get some tips on how to create a welcoming and inclusive outdoor gym space for your community. Let's get everyone moving!

      Explore Fitness Products

      Why build an outdoor gym?

      Adding an outdoor gym to your park or recreation area promotes healthier lifestyles for residents. Outdoor workouts provide fresh air, natural sunlight, improved mental health, and reduced stress. They are typically more affordable, require less maintenance than indoor gyms, and are more environmentally friendly. Consequently, an outdoor gym can lead to healthier, happier residents.

      Error executing template "/Designs/Hags2024/Paragraph/h24-numbered-items.cshtml"
      System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Exception of type 'System.InvalidOperationException' was thrown.
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.TryGetValue(TKey key, TValue& value)
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(TKey key, CreateValueCallback createValueCallback)
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetOrCreateValue(TKey key)
         at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CSharpSyntaxNode.GetStructure(SyntaxTrivia trivia)
         at Microsoft.CodeAnalysis.SyntaxTrivia.GetStructure()
         at Microsoft.CodeAnalysis.SyntaxNode.<DescendantTriviaIntoTrivia>d__171.MoveNext()
         at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNode node, Func`2 filter, List`1& directives)
         at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNodeOrToken& node, Func`2 filter, List`1& directives)
         at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.GetContexts(SyntaxTree tree, Boolean isGeneratedCode)
         at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.Create(SyntaxTree tree, Boolean isGeneratedCode)
         at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.EnsureNullableContextMapInitialized()
         at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxTree syntaxTree, Int32 position)
         at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxToken token)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNonGenericSimpleNamespaceOrTypeOrAliasSymbol(IdentifierNameSyntax node, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics, NamespaceOrTypeSymbol qualifierOpt)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeOrAliasSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.Imports.FromSyntax(CSharpSyntaxNode declarationSyntax, InContainerBinder binder, ConsList`1 basesBeingResolved, Boolean inUsing)
         at Microsoft.CodeAnalysis.CSharp.InContainerBinder.<>c__DisplayClass6_0.<.ctor>b__0(ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.InContainerBinder.GetImports(ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetImports(SingleNamespaceDeclaration declaration)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
         at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
         at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
         at System.Threading.Tasks.Task.InnerInvoke()
         at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
         at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
         --- End of inner exception stack trace ---
         at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
         at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
         at System.Threading.Tasks.Task.Wait()
         at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
         at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
         at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
         at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
         at System.Threading.Tasks.Task.InnerInvoke()
         at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
         at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
         --- End of inner exception stack trace ---
         at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
         at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
         at System.Threading.Tasks.Task.Wait()
         at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
         at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceModuleSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceAssemblySymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetSourceDeclarationDiagnostics(SyntaxTree syntaxTree, Nullable`1 filterSpanWithinTree, Func`4 locationFilterOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetDiagnostics(CompilationStage stage, Boolean includeEarlierStages, DiagnosticBag diagnostics, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.CompileMethods(CommonPEModuleBuilder moduleBuilder, Boolean emittingPdb, Boolean emitMetadataOnly, Boolean emitTestCoverageData, DiagnosticBag diagnostics, Predicate`1 filterOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream metadataPEStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, CompilationTestData testData, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, IMethodSymbol debugEntryPoint, Stream sourceLinkStream, IEnumerable`1 embeddedTexts, Stream metadataPEStream, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.Compilation.Emit(Stream peStream, Stream pdbStream, Stream xmlDocumentationStream, Stream win32Resources, IEnumerable`1 manifestResources, EmitOptions options, CancellationToken cancellationToken)
         at RazorEngine.Roslyn.CSharp.RoslynCompilerServiceBase.CompileType(TypeContext context)
         at RazorEngine.Templating.RazorEngineCore.CreateTemplateType(ITemplateSource razorTemplate, Type modelType)
         at RazorEngine.Templating.RazorEngineCore.Compile(ITemplateKey key, Type modelType)
         at RazorEngine.Templating.RazorEngineService.CompileAndCacheInternal(ITemplateKey key, Type modelType)
         at RazorEngine.Templating.RazorEngineService.GetCompiledTemplate(ITemplateKey key, Type modelType, Boolean compileOnCacheMiss)
         at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
         at RazorEngine.Templating.DynamicWrapperService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
         at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
         at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
         at RazorEngine.Templating.RazorEngineServiceExtensions.RunCompile(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag)
         at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
         at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
         at Dynamicweb.Rendering.Template.RenderRazorTemplate()
      ---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> System.InvalidOperationException: Exception of type 'System.InvalidOperationException' was thrown.
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.TryGetValue(TKey key, TValue& value)
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(TKey key, CreateValueCallback createValueCallback)
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetOrCreateValue(TKey key)
         at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CSharpSyntaxNode.GetStructure(SyntaxTrivia trivia)
         at Microsoft.CodeAnalysis.SyntaxTrivia.GetStructure()
         at Microsoft.CodeAnalysis.SyntaxNode.<DescendantTriviaIntoTrivia>d__171.MoveNext()
         at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNode node, Func`2 filter, List`1& directives)
         at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNodeOrToken& node, Func`2 filter, List`1& directives)
         at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.GetContexts(SyntaxTree tree, Boolean isGeneratedCode)
         at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.Create(SyntaxTree tree, Boolean isGeneratedCode)
         at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.EnsureNullableContextMapInitialized()
         at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxTree syntaxTree, Int32 position)
         at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxToken token)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNonGenericSimpleNamespaceOrTypeOrAliasSymbol(IdentifierNameSyntax node, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics, NamespaceOrTypeSymbol qualifierOpt)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeOrAliasSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.Imports.FromSyntax(CSharpSyntaxNode declarationSyntax, InContainerBinder binder, ConsList`1 basesBeingResolved, Boolean inUsing)
         at Microsoft.CodeAnalysis.CSharp.InContainerBinder.<>c__DisplayClass6_0.<.ctor>b__0(ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.InContainerBinder.GetImports(ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetImports(SingleNamespaceDeclaration declaration)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
         at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
         at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
         at System.Threading.Tasks.Task.InnerInvoke()
         at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
         at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
         --- End of inner exception stack trace ---
         at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
         at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
         at System.Threading.Tasks.Task.Wait()
         at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
         at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
         at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
         at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
         at System.Threading.Tasks.Task.InnerInvoke()
         at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
         at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)
      ---> (Inner Exception #0) System.InvalidOperationException: Exception of type 'System.InvalidOperationException' was thrown.
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.VerifyIntegrity()
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.TryGetValue(TKey key, TValue& value)
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetValue(TKey key, CreateValueCallback createValueCallback)
         at System.Runtime.CompilerServices.ConditionalWeakTable`2.GetOrCreateValue(TKey key)
         at Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.CSharpSyntaxNode.GetStructure(SyntaxTrivia trivia)
         at Microsoft.CodeAnalysis.SyntaxTrivia.GetStructure()
         at Microsoft.CodeAnalysis.SyntaxNode.<DescendantTriviaIntoTrivia>d__171.MoveNext()
         at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNode node, Func`2 filter, List`1& directives)
         at Microsoft.CodeAnalysis.SyntaxNodeOrToken.GetDirectives[TDirective](SyntaxNodeOrToken& node, Func`2 filter, List`1& directives)
         at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.GetContexts(SyntaxTree tree, Boolean isGeneratedCode)
         at Microsoft.CodeAnalysis.CSharp.Syntax.NullableContextStateMap.Create(SyntaxTree tree, Boolean isGeneratedCode)
         at Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.EnsureNullableContextMapInitialized()
         at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxTree syntaxTree, Int32 position)
         at Microsoft.CodeAnalysis.CSharp.Binder.AreNullableAnnotationsEnabled(SyntaxToken token)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNonGenericSimpleNamespaceOrTypeOrAliasSymbol(IdentifierNameSyntax node, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics, NamespaceOrTypeSymbol qualifierOpt)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeOrAliasSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved, Boolean suppressUseSiteDiagnostics)
         at Microsoft.CodeAnalysis.CSharp.Binder.BindNamespaceOrTypeSymbol(ExpressionSyntax syntax, DiagnosticBag diagnostics, ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.Imports.FromSyntax(CSharpSyntaxNode declarationSyntax, InContainerBinder binder, ConsList`1 basesBeingResolved, Boolean inUsing)
         at Microsoft.CodeAnalysis.CSharp.InContainerBinder.<>c__DisplayClass6_0.<.ctor>b__0(ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.InContainerBinder.GetImports(ConsList`1 basesBeingResolved)
         at Microsoft.CodeAnalysis.CSharp.CSharpCompilation.GetImports(SingleNamespaceDeclaration declaration)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken)
         at Microsoft.CodeAnalysis.CSharp.Symbols.SourceNamespaceSymbol.<>c__DisplayClass49_1.<ForceComplete>b__0(Int32 i)
         at Roslyn.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param)
         at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
         at System.Threading.Tasks.Task.InnerInvoke()
         at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
         at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object <p0>)<---
      <---
      
      
      1 @inherits Dynamicweb.Rendering.RazorTemplateBase<Dynamicweb.Rendering.RazorTemplateModel<Dynamicweb.Rendering.Template>> 2 @{ 3 var blocks = GetLoop("Item.Block_Items"); 4 string mainHeading = GetString("Item.Heading"); 5 string designBaseUrl = @GetString("Template:DesignBaseUrl"); 6 string ctaCopy = @GetString("Item.CTA_Copy"); 7 string ctaLink = @GetString("Item.CTA_Link"); 8 int itemsIndex = 0; 9 } 10 11 12 <div class="wrapper flow"> 13 14 @if ( mainHeading != "" ) 15 { 16 <h3 class="t-center">@(mainHeading)</h3> 17 } 18 19 20 <div class="center-copy flow"> 21 22 @foreach (var block in blocks) 23 { 24 string heading = block.GetString("Item.Block_Items.Heading"); 25 string content = block.GetString("Item.Block_Items.Block_Copy"); 26 itemsIndex++; 27 28 <div class="flow"> 29 <h4 class="big-number"> 30 <span>@(itemsIndex)</span> 31 @heading 32 </h4> 33 @content 34 </div> 35 } 36 37 @if ( ctaLink !="" ) 38 { 39 <p><a class="btn btn--outline" href="@(ctaLink)">@ctaCopy</a></p> 40 } 41 42 43 </div> 44 45 </div>

      Designing an outdoor gym

      Before starting your outdoor fitness project, ensure you have all necessary elements for success. With careful planning and design, you can create a popular spot for those seeking to get active. A well located gym can attract people from nearby exercise trails, enhancing their routines with strength training.

      To meet the highest safety and fitness standards, follow these design and creation tips. We can guide you through every step, from start to finish, so don't hesitate to contact us for support.

      An elderly woman is completing the step up challenge at an outdoor gym station.

      1. Budget

      Before starting an outdoor fitness area project, ensure you have a clear budget to avoid underestimating costs and ensure project completion. A budget helps identify funding sources, optimizes resource use, and determines gym size and equipment. Public gyms might use grants or donations, while private gyms may rely on resident fees. Financial approval from relevant organizations may be needed. An accurate budget is crucial for site planning, equipment, and installation.

      A man is exercising on a trinity cycle, which is a laid back bike for exercise.

      2. Location

      Choosing the right location for your outdoor fitness area is crucial for its success. Consider proximity to amenities, public transportation access, and available outdoor spaces. A convenient location ensures higher user engagement. Also, consider the local climate for year-round usability. Ideally, place the fitness area where it attracts attention and is easily accessible. In public parks, situate it near running or biking trails and provide adequate parking for those who drive.

      Two people are exercising on an outdoor leg press machine.

      3. Site planning

      Site planning is crucial for an outdoor fitness area project. It helps identify the best location, assess risks like environmental hazards or access issues, and ensure compliance with local zoning and building codes. Proper planning also aids in budgeting by identifying potential costs. Choose a site with good drainage and sufficient shade for summer comfort. Address low spots by adding soil to prevent water ponding, which can pose safety hazards.

      Close up of a seat for an outdoor exercise station, it shows how all the components are joined up to focus on quality of material and design.

      4. Safety

      Ensuring the safety of outdoor exercise equipment users is paramount. Use durable materials and fixtures to protect against vandalism and extend the installation's lifespan. Adding floodlights allows for equipment use after dark or on overcast days, enhancing security and deterring vandalism. This visibility helps keep the gym in good condition for longer enjoyment.

      A woman exercises on an outdoor elliptical exercise machine, she is looking to the side and smiling.

      5. Target users

      To identify the target audience of the outdoor gym site, consider the context in which it will be used. For example, if it is part of an apartment complex that caters to young, single people, fitness classes and socializing opportunities should be included. On the other hand, if the gym is located near a jogging trail, more cardio equipment may not be necessary.

      An elderly woman exercises on an arm swirl for flexibility at an outdoor fitness area.

      6. Accessibility

      Your outdoor gym area must be accessible. Where possible ensure there are reserved, accessible parking spots close to the gym and that all walkways and ground surfaces are suitable for people who use mobility devices.

      Close up of HAGS labels on outdoor fitness machines to show how to use the machine.

      7. Equipment to install

      Choose durable, budget friendly equipment for your outdoor facility. Ensure each station has enough space for safe use without overlapping others. Include signage with visuals to demonstrate proper equipment use, helpful for non-native speakers. 

      A woman is exercising on a standalone outdoor fitness bike, a man stands next to her in encouragement, they are both smiling.

      8. Surfacing

      The outdoor gym space should have a ground surface which is easily accessible. Two of the most common choices are rubber wetpour surfacing and loose-fill surface material. The option you select will be determined by your budget and the type of equipment you plan to install.

      A shot of a woman exercising on an outdoor machine, she is smiling directly at the camera. In the foreground you can see a blurred person also exercising.

      9. Promotion

      Ensure your new outdoor gym is well used by hosting a grand opening celebration. Invite fitness professionals to demonstrate the equipment and inform local residents about the event. Promote the gym through signs in common areas and updates on websites as part of a broader campaign. With the right strategy, your investment will attract more users.

      Why choose HAGS?

      Two women in exercise clothes are walking towards an outdoor gym area, they are talking to each other.

      Original

      HAGS are one of the few Original Equipment Manufacturers of fitness equipment in Europe.

      This means that we don’t rely on imported products or components, ensuring that original spare parts or refurbishments can be provided promptly and without delay when needed.

      Not all fitness products are equal and, whilst the differences might appear small, it’s important to note the integrity with which we design our products.

      An older woman is doing push ups using outdoor fitness bars. In the background more people are exercising on the fitness equipment.

      High Quality

      We use high-quality materials and production methods for our internal buffer stops, helping to reduce the risk of entrapments and injury. Our bearings have high running accuracy, high-speed performance, and high system rigidity.

      We use continuous welding techniques on many steel parts. This helps to eliminate water ingress, and prevent rust and corrosion. Our accredited powder coating system is economical, long lasting, and colour durable.

      A woman exercises on an outdoor elliptical exercise machine, she is surrounded by nature and trees.

      Inclusive

      We design equipment that challenges you no matter your ability or body shape.

      We use anthropometric data on human body size and shapes during the design process. Therefore, taller or heavier adults are less prone to injury on our equipment as all body dimensions have been considered.

      Accessibility and usability are also important considerations during the design process, resulting in equipment that can be used by as many people as possible.

      A man hangs from horizontal ladder at an outdoor fitness gym.

      Back and Shoulders

      Your space can encourage working out the back and shoulders without expensive free weights. Instead, consider Dip Station, Rower and Horizontal Ladder. These options provide work for the shoulders, arms and back. Pull-ups and chin-ups require the individual to lift their body weight from the ground. Lat pull-downs use a resistance bar to increase force when pulling down on it.

      A man exercises at an outdoor gym station, he is surrounded by trees and nature.

      Chest workout

      Provide chest workout equipment with our Push-Up and Lat Pull & Chest Press. Chest press devices work the chest muscles by requiring the user to push against a bar. A similar action occurs during push-ups. Our push-up bar uses one or more bars mounted on the ground to provide varying difficulty levels for push-ups. Higher bars are better for beginners because they only require the user to push against a portion of their body weight. Lower bars increase the percentage of body weight the person must push against, thus increasing the challenge.

      A woman is exercising on a Ski Stepper, she is surrounded by trees and nature.

      Cardio fitness

      Not all gyms focus on strength training. Cardio equipment is vital to include if your gym does not have a nearby jogging trail or swimming pool. Options for cardio equipment include Air Skier, Pedal Bike and Ski Stepper. The Trinity Cycle is another accessible option for building cardiovascular ability and upper body strength.

      A woman walks across a balance beam at an outdoor fitness area.

      Balance improvement

      Balance is crucial for health at any age. Whether you expect the outdoor gym to see more 20-somethings, seniors or people in between, include balance equipment to maintain and strengthen their skills. The Balance Beam will challenge the user to stay upright while standing on it, and the Ladder Walk will build confidence for older users while walking.

      A woman completes sit ups at an outdoor gym bench.

      Abdominal and core stations

      The core muscles help to maintain posture and keep the body upright. Consequently, equipment that works the abdominals can be some of the most popular in your gym. Sit-Up stations give users a place to practice these exercises without lying on the ground. The Parallel Rails work the hard-to-exercise lower portion of the core that pulls up the legs.

      An elderly woman completes dips at an outdoor fitness area, she is looking up and smiling.

      Arm workout

      While many arm workout equipment pieces also work the chest or back, Dip Station focuses on the arms, specifically the triceps. These exercises encourage the development of strength in the muscles at the backs of the arms.

      Elderly people complete a finger and arm stretch exercise at an outdoor gym.

      Flexibility stations

      Flexibility is just as essential as balance. Some equipment that focuses on this skill includes Arm Swirl, Push Hands, Finger & Arm Stretch and Plyometric Platforms. These workouts require the individual to hop back and forth over obstacles or on top of boxes. They are ideal for those training to do parkour or obstacle courses, but these workout solutions also help those who want to improve their agility overall.

      Choosing the right colors

      According to behavioural psychologists, color affects a person’s mind as well as body. Light enters from eyes and skin, travels through neurological pathways and affects the pineal gland in the brain, which in turn affects our body, mind, and emotions.

      HAGS offer all fitness products in 6 standard color options to suit your space and your needs. Below are a few tips if you're wondering which colour palette works best for you.

      Girl playing basketball on a multi-sports court

      Green

      Green is the color of balance and harmony. It symbolizes nature, which not only relaxes the body but also relaxes the mind. It is also a sign of growth. If you are looking to exude health, rest, and stress relief, green is a great color for an outdoor gym space.

      Bright Colors

      Neon bright colors are stimulating and energetic. Adding a touch of them to a group of fitness or cardio space can give people the energy to get through a workout. 

      Grey & Silver

      Grey and Silver are more neutral, and if you’re keen to create a space that is symbolic of elegance and sophistication, then these are great choices. These colors are also much easier to match with other equipment if you are looking to expand an existing area.

      Two men are doing street workout exercises at an outdoor gym.

      Find out how Street Workouts offer full-body exercises.

      Close up of an outdoor exercise platform with stairs, it has a HAGS logo cut out on the steps, an person's feet is seen going up.

      Find out how we meet safety standards for fitness.

      Pink blossoms in focus with a colorful playground unit blurred in the background.

      Explore our color and anchoring options.

      Springer toy for outdoor playgrounds shaped like a horse, in red.

      Have questions? We are listening! Get in touch. 

      }